首页 > 解决方案 > 如何在数组中操作数组

问题描述

我有一个X_train形状为(1433, 1). 第一个维度 ( 1433) 是用于训练的图像数量。第二个维度 ( 1) 是一个 np.array ,它本身具有一个 shape (224, 224, 3)。我可以通过 确认X_train[0][0].shape。我需要适合X_train模型:

model.fit([X_train, y_train[:,1:]], y_train[:,0], epochs=50, batch_size=32,  verbose=1)

错误输出不言自明:

    Traceback (most recent call last):
  File "/home/combined/file_01.py", line 97, in <module>
    img_output = Flatten()(x_1)
  File "/usr/local/lib/python3.5/dist-packages/keras/engine/base_layer.py", line 414, in __call__
    self.assert_input_compatibility(inputs)
  File "/usr/local/lib/python3.5/dist-packages/keras/engine/base_layer.py", line 327, in assert_input_compatibility
    str(K.ndim(x)))
ValueError: Input 0 is incompatible with layer flatten_1: expected min_ndim=3, found ndim=2

y_train[:,1:]形状似乎没问题(1433, 9)

我需要做什么X_train才能model.fit成功输入 (1433, 224, 224, 3)?

标签: pythonarraysnumpynumpy-ndarray

解决方案


看来你有这样的情况:

import numpy as np
x_train = np.zeros((1433, 1), dtype=object)
for i in range(x_train.shape[0]):
    x_train[i, 0] = np.random.random((224, 224, 3))

x_train.shape        # (1433, 1)
x_train[0, 0].shape  # (224, 224, 3)

哪里x_trainobject数组(如嵌套列表)而不是numeric数组。

您需要更改x_train为纯numeric数组:

x_train = np.array([x for x in x_train.flatten()], dtype=float)
x_train.shape       # (1433, 224, 224, 3)
x_train[0].shape    # (224, 224, 3)

推荐阅读