【问题标题】:How to fit the model for multi input problem in keras如何在 keras 中拟合多输入问题的模型
【发布时间】: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


    【解决方案1】:

    您必须重新定义fit(*) 参数,如下所示:

    model.fit([trainX1, trainX2], [trainY1, trainY2],validation_data=([valX1,valX2],[valY1,valY2]), epochs=5, batch_size=32, verbose=1)
    

    问题是您是否还希望模型为trainY1trainY2 输出两个值。目前,您只有两个输入和一个输出。

    【讨论】:

    • 感谢您的回复。我的目标是有一个输出。
    猜你喜欢
    • 1970-01-01
    • 2021-02-24
    • 2020-09-09
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多