找不到与输入层2不兼容的0,m=2

2024-03-29 13:43:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有Keras模型如下所示,我试图将图像输入与数值特征向量合并,但有以下错误:

ValueError: Input 0 is incompatible with layer flatten_2: expected min_ndim=3, found ndim=2

出现在以下语句中:

value_model.add(Flatten(input_shape=(12,)))

我有什么办法解决这个问题吗?在

image_input = Input((512, 512, 1))
vector_input = Input((12,))

image_model = Sequential()
image_model.add(Convolution2D(32,8,8, subsample=(4,4), input_shape=(512,512,1)))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64,4,4, subsample=(2,2)))
image_model.add(Activation('relu'))
image_model.add(Convolution2D(64,3,3, subsample=(1,1)))
image_model.add(Activation('relu'))
image_model.add(Flatten())
image_model.add(Dense(512))
image_model.add(Activation('relu'))

value_model = Sequential()
value_model.add(Flatten(input_shape=(12,)))
value_model.add(Dense(16))
value_model.add(Activation('relu'))
value_model.add(Dense(16))
value_model.add(Activation('relu'))
value_model.add(Dense(16))
value_model.add(Activation('relu'))

merged = Concatenate([image_model, value_model])

final_model = Sequential()
final_model.add(merged)
final_model.add(Dense(1, activation='sigmoid'))

model = Model(inputs=[image_input, vector_input], outputs=output)
model.compile(loss='binary_crossentropy', optimizer='adam',metrics=['acc'])
model.fit([images, features], y, epochs=5)

编辑-1

以下是全文:

^{pr2}$

编辑-2

当我做以下事情时:

output = final_model.add(Dense(1, activation='sigmoid'))

我还是收到了同样的错误。在


Tags: imageaddinputmodelvalueactivationdensefinal
1条回答
网友
1楼 · 发布于 2024-03-29 13:43:17

您可以更改代码以反映新的Keras 2 API,如下所示。在您的代码中,您正在尝试旧的kerasAPI和Keras 2 API的混合方法。在

我还建议在keras2api中使用新的Conv2D层,而不是{}层。subsample参数现在在Conv2D中称为strides

image_input = Input((512, 512, 1))
vector_input = Input((12,))

image_model = Conv2D(32,(8,8), strides=(4,4))(image_input)
image_model = Activation('relu')(image_model)
image_model = Conv2D(64,(4,4), strides=(2,2))(image_model)
image_model = Activation('relu')(image_model)
image_model = Conv2D(64,(3,3), strides=(1,1))(image_model)
image_model = Activation('relu')(image_model)
image_model = Flatten()(image_model)
image_model = Dense(512)(image_model)
image_model = Activation('relu')(image_model)

value_model = Dense(16)(vector_input)
value_model = Activation('relu')(value_model)
value_model = Dense(16)(value_model)
value_model = Activation('relu')(value_model)
value_model = Dense(16)(value_model)
value_model = Activation('relu')(value_model)

merged = concatenate([image_model, value_model])

output = Dense(1, activation='sigmoid')(merged)

model = Model(inputs=[image_input, vector_input], outputs=output)

model.compile(loss='binary_crossentropy', optimizer='adam')

考虑一个玩具数据集

^{pr2}$

培训

model.fit([I, V], y, epochs=10, verbose=1)


Epoch 1/10
100/100 [==============================] - 9s 85ms/step - loss: 3.4615
Epoch 2/10
 32/100 [========>.....................] - ETA: 4s - loss: 0.9696

相关问题 更多 >