你好我对keras有一些疑问。
目前我想实现一些网络
使用相同的cnn模型,并使用两个图像作为cnn模型的输入
并使用两个cnn模型的结果,提供给Dense模型
例如
def cnn_model():
input = Input(shape=(None, None, 3))
x = Conv2D(8, (3, 3), strides=(1, 1))(input)
x = GlobalAvgPool2D()(x)
model = Model(input, x)
return model
def fc_model(cnn1, cnn2):
input_1 = cnn1.output
input_2 = cnn2.output
input = concatenate([input_1, input_2])
x = Dense(1, input_shape=(None, 16))(input)
x = Activation('sigmoid')(x)
model = Model([cnn1.input, cnn2.input], x)
return model
def main():
cnn1 = cnn_model()
cnn2 = cnn_model()
model = fc_model(cnn1, cnn2)
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(x=[image1, image2], y=[1.0, 1.0], batch_size=1, ecpochs=1)
我想实现这样的模型,并训练模型
但我收到如下错误消息:
'所有图层名称都应该是唯一的'
实际上我只想使用一个CNN模型作为特征提取器,最后使用两个特征来预测一个浮点值为0.0~1.0
所以整个系统 - >> 使用两个图像并从同一CNN模型中提取特征,并向Dense模型提供特征以获得一个浮动值
请帮助我实施这个系统以及如何训练..
谢谢
答案 0 :(得分:0)
请参阅Keras文档中有关共享层的部分:
https://keras.io/getting-started/functional-api-guide/
上述文档中的代码段演示了这一点:
# This layer can take as input a matrix
# and will return a vector of size 64
shared_lstm = LSTM(64)
# When we reuse the same layer instance
# multiple times, the weights of the layer
# are also being reused
# (it is effectively *the same* layer)
encoded_a = shared_lstm(tweet_a)
encoded_b = shared_lstm(tweet_b)
# We can then concatenate the two vectors:
merged_vector = keras.layers.concatenate([encoded_a, encoded_b], axis=-1)
# And add a logistic regression on top
predictions = Dense(1, activation='sigmoid')(merged_vector)
# We define a trainable model linking the
# tweet inputs to the predictions
model = Model(inputs=[tweet_a, tweet_b], outputs=predictions)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit([data_a, data_b], labels, epochs=10)