【发布时间】:2021-10-25 10:22:17
【问题描述】:
我有两组数据,使用train_test_split 划分为训练和验证子集。我在使用model.fit 运行培训时遇到问题。谁能帮忙把model.fit按正确的顺序排列?
(trainY1, valY1, trainX1, valX1) = train_test_split(df, images1, test_size=0.30, random_state=42)
print (np.shape(trainY1),np.shape(valY1),np.shape(trainX1),np.shape(valX1))
(trainY2, valY2, trainX2, valX2) = train_test_split(df, images2, test_size=0.30, random_state=42)
print (np.shape(trainY2),np.shape(valY2),np.shape(trainX2),np.shape(valX2))
结果:
(953,) (409,) (953, 16, 16, 4) (409, 16, 16, 4)
(953,) (409,) (953, 16, 16, 4) (409, 16, 16, 4)
型号:
v1 = layers.Input(shape = (16,16,4))
cnn1 = layers.Conv2D(filters=32, kernel_size=(3,3), strides=(1,1), padding='same')(v1)
cnn1 = layers.Activation('relu')(cnn1)
cnn1 = layers.MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid')(cnn1)
cnn1 = layers.Flatten()(cnn1)
v2 = layers.Input(shape = (16,16,4))
cnn2 = layers.Conv2D(filters=32, kernel_size=(3,3), strides=(1,1), padding='same')(v2)
cnn2 = layers.Activation('relu')(cnn2)
cnn2 = layers.MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid')(cnn2)
cnn2 = layers.Flatten()(cnn2)
merge = layers.concatenate([cnn1, cnn2])
dense = layers.Dense(50, activation='relu')(merge)
output = layers.Dense(1)(dense)
model = Model(inputs=[v1, v2], outputs=output)
model.compile(loss='mse', optimizer='adam')
model.fit([trainX1, trainY1], [trainX2, trainY2],validation_data=([valX1,valY1],[valX2,valY2]), epochs=5, batch_size=32, verbose=1)
错误:
input KerasTensor(type_spec=TensorSpec(shape=(None, 16, 16, 4), dtype=tf.float32, name='input_24'), name='input_24', description="created by layer 'input_24'"),但它是在形状不兼容的输入上调用的 (None, 1)。
ValueError:conv2d_25 层的输入 0 与该层不兼容::预期 min_ndim=4,发现 ndim=2。收到的完整形状:(无,1)
【问题讨论】:
标签: python tensorflow keras deep-learning