我目前越来越沮丧,试图合并两个不同的形状输入层,我想给予我的模型作为输入。
我拥有:
我有以下两个输入
X_train # shape (120, 224, 224, 1)
landmarks_x_train # shape (120, 478, 3)
X_val # shape (40, 224, 224, 1)
landmarks_x_val # shape (40, 478, 3)
因此,在这个例子中,我有120张灰度图像,大小为(224,224),它们都有一个地标“集”,其中有478个地标,具有x,y,z坐标。
数字120只是一个例子,真实的数据集具有更多的图像和每个图像的地标。
作为一个模型,我自己用input_shape=(224, 224, 1)
构建了一个ResNet50。x = Dense(7, activation='softmax')(x)
的输出
在训练模型之前,我创建一个ImageDataGenerator
流,如下所示:
datagen = ImageDataGenerator(horizontal_flip=True, fill_mode='nearest')
datagen.fit(X_train_with_landmarks)
batch_size = 16
train_flow = datagen.flow(X_train, y_train, batch_size=batch_size)
val_flow = datagen.flow(X_val, y_val, batch_size=batch_size)
我的训练步骤是这样的:
model = ResNet.get_resnet_50_model() # my class where the model is located
optimizer = Adam(learning_rate=0.01)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
num_epochs = 5
history = model.fit(train_flow,
steps_per_epoch=len(X_train) / batch_size,
epochs=num_epochs,
verbose=2,
validation_data=val_flow,
validation_steps=len(X_val) / batch_size)
问题所在:
我现在想把这两个输入合并结合起来,我必须建立一个更好的模型,而不仅仅是像现在这样依赖于图像。
我已经尝试了几件事,我发现在网络上,也问ChatGPT,但没有运气。
最有前途的方法是两个合并,这两个与Keras Concatenate
层,像这样:
model = ResNet.get_resnet_50_model()
landmarks_input = Input(shape=(landmarks_x_train.shape[1],), name='landmarks_input')
model_output = model.output
combined_input = concatenate([model_output, landmarks_input], name='combined_input')
model = Model(inputs=[model.input, landmarks_input], outputs=combined_input)
这给了我一个模型,但我无法调整model.fit()
进程以使其运行。
结论:
所以现在我希望有人能帮我把这两个输入合并结合起来,这样我就可以在这两个输入上训练模型了。
1条答案
按热度按时间puruo6ea1#
在keras中,可以使用keras函数API集成混合数据和多个输入。
从架构的Angular 来看,您将引入两个输入流,进入密集层,然后您将连接这些输入流。
完整的教程可以在here找到。