Я получил следующую ошибку, когда попытался обучить модель в керасе.
ValueError: Ошибка при проверке ввода модели: список массивов Numpy, передаваемых в вашу модель, не соответствует размеру, ожидаемому моделью. Ожидается увидеть 5 массивов, но вместо этого получит следующий список из 1 массивов:
Это форма ввода:
x_train shape: (231, 244, 1) | y_train shape: (231, 2)
x_test shape : (432, 244, 1) | y_test shape : (432, 2)
x_train_1: (231, 61, 1)
x_train_2: (231, 61, 1)
x_train_3: (231, 61, 1)
x_train_4: (231, 61, 1)
Это моя модель:
def input_part(x_train):
input_shape = x_train[0,:,:].shape
model_input = Input(shape=input_shape)
return model_input
def conv_pool(model_input: Tensor) -> training.Model:
# 3 covs + 1 ave_pool + 3 covs + 1 ave_pool + flatten
global_x = Dense(128, activation='relu')(x)
return global_x
def cnn_p1(model_input: Tensor) -> training.Model:
# 3 covs + 1 ave_pool + 3 covs + 1 ave_pool + flatten
cnnpart_1 = Dense(128, activation='relu')(x)
return cnnpart_1
def cnn_p2(model_input: Tensor) -> training.Model:
# 3 covs + 1 ave_pool + 3 covs + 1 ave_pool + flatten
cnnpart_2 = Dense(128, activation='relu')(x)
return cnnpart_2
def cnn_p3(model_input: Tensor) -> training.Model:
# 3 covs + 1 ave_pool + 3 covs + 1 ave_pool + flatten
cnnpart_3 = Dense(128, activation='relu')(x)
return cnnpart_3
def cnn_p4(model_input: Tensor) -> training.Model:
# 3 covs + 1 ave_pool + 3 covs + 1 ave_pool + flatten
cnnpart_4 = Dense(128, activation='relu')(x)
return cnnpart_4
def ensemble(x_train):
x_train_1, x_train_2, x_train_3, x_train_4 = np.split(x_train, 4, axis=1)
model_input = input_part(x_train)
model_input_1 = input_part(x_train_1)
model_input_2 = input_part(x_train_2)
model_input_3 = input_part(x_train_3)
model_input_4 = input_part(x_train_4)
conv_pool_model = conv_pool(model_input)
cnn_p1_model = cnn_p1(model_input_1)
cnn_p2_model = cnn_p1(model_input_2)
cnn_p3_model = cnn_p1(model_input_3)
cnn_p4_model = cnn_p1(model_input_4)
conca = Concatenate(axis=0)([conv_pool_model, cnn_p1_model, cnn_p2_model, cnn_p3_model, cnn_p4_model])
x = Dropout(0.5)(conca)
x = Dense(2, activation='softmax')(x)
model = Model(inputs = [model_input, model_input_1, model_input_2, model_input_3, model_input_4], outputs=x, name='conv_pool_cnn')
return model
Для обучения
def compile_and_train(model:training.Model, num_epochs: int, x_train, y_train) -> Tuple[History, str]:
sgd = SGD(lr=0.0001, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=0, save_weights_only=True,
save_best_only=True, mode='auto', period=1)
tensor_board = TensorBoard(log_dir='global2/', histogram_freq=0, batch_size=10)
history = model.fit(x=x_train, y=y_train, batch_size=10, epochs=num_epochs, verbose=1,
callbacks=[checkpoint, tensor_board],
validation_split=0.2, shuffle=True)
weight_files = glob.glob(os.path.join(os.getcwd(), 'global/*'))
weight_file = max(weight_files, key=os.path.getctime)
return history, weight_file
Где это имеет ошибку выше:
history = model.fit(x=x_train, y=y_train, batch_size=10, epochs=num_epochs, verbose=1,
callbacks=[checkpoint, tensor_board],
validation_split=0.2, shuffle=True)
Я получаю эту ошибку:
Traceback (most recent call last):
File "D:/Users/11825/source/repos/mutil cnn/ensembling_CNN.py", line 191, in <module>
history, cnn_weight_file = compile_and_train(cnn_pool_model, NUM_EPOCHS, x_train, y_train)
File "D:/Users/11825/source/repos/mutil cnn/ensembling_CNN.py", line 156, in compile_and_train
validation_split=0.2, shuffle=True)
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 5 array(s), but instead got the following list of 1 arrays: