Я тренирую функциональную модель keras в наборе данных mnist. Существует слой, который требует 2 входных данных - традиционный входной тензор и текущую партию горячих закодированных меток. Я думаю, что я настроил свою модель для приема 2 входов, но я получаю:
ValueError: Ошибка при проверке модели: список массивов Numpy, передаваемых в вашу модель, не соответствует размеру, ожидаемому моделью. Ожидается увидеть 2 массива (ов), но вместо этого получен следующий список из 1 массива. [массив ([[[[0.], ...
В большинстве ответов предлагалось преобразовать входные данные в числовые массивы, но изображения и метки mnist по умолчанию являются числовыми массивами.
batch_size = 128
num_classes = 10
epochs = 1
# Mnist part
img_rows, img_cols = 28, 28
(x_train, y_train), (x_test, y_test) = mnist.load_data()
if K.image_data_format() == 'channels_first':
x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# Model part
images = Input(shape=input_shape, name='images_input')
labels = Input(shape=(num_classes,), name='labels_input')
x = Conv2D(32, kernel_size=(3, 3), activation='relu')(images)
x = Conv2D(64, (3, 3), activation='relu')(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Dropout(0.25)(x)
x = Flatten()(x)
x = Dense(128, activation='relu', name='features')(x)
x = Dropout(0.5)(x)
x = SomeLayerWith2Inputs()([x, labels])
output = Dense(num_classes, activation='softmax')(x)
model = Model(inputs=[images, labels], outputs=output)
model.compile(
loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy']
)
# x_train = <type 'numpy.ndarray'> (60000, 28, 28, 1)
# y_train = <type 'numpy.ndarray'> (60000, 10)
# x_test = <type 'numpy.ndarray'> (10000, 28, 28, 1)
# y_test = <type 'numpy.ndarray'> (10000, 10)
model.fit(
[x_train, y_train],
y_train,
batch_size=batch_size,
callbacks=[tensorboard],
epochs=epochs,
verbose=1,
validation_data=([x_test, y_test], y_test)
)
Я тоже пытался сделать model.fit(x={'images_input': x_train, 'labels_input': y_train}, y=y_train)
, но это тоже не сработало.
Я использую Keras v2.2.4