как манипулировать массивом в массиве - PullRequest
1 голос
/ 21 февраля 2020

У меня есть X_train np.array с формой (1433, 1). Первое измерение (1433) - это количество изображений для тренировки. Второе измерение (1) - массив np.ar само по себе имеет форму (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)?

1 Ответ

1 голос
/ 21 февраля 2020

Кажется, что у вас есть такой случай:

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_train - это массив object (как вложенный список), а не 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)
...