【发布时间】:2019-03-04 20:58:43
【问题描述】:
我必须创建神经网络模型,如下所示:
convolution --> classification
\ /
\ /
_\| |/_
third model
with one output
卷积输出数据,用作分类模型的输入。之后,卷积和分类输出被填充(连接)到第三个模型。第三个模型将输出预测 0..1,用于训练整个网络。
- 首先:在这种情况下是否可以正确地反向传播分类模型?或者这需要创建三个分离的模型?
- 我曾尝试连接卷积和分类,但没有好的结果。我收到“图表已断开连接”错误。
完整的错误日志: “图表已断开连接:无法在“classification_prediction_Input”层获得张量 Tensor(“classification_prediction_Input_2:0”, shape=(1, 512), dtype=float32) 的值。以下先前层的访问没有问题:[]”。
如果想法正确,如何连接“图形”上的模型?
我现在的代码:
# state convolution
state_input = Input(shape=INPUT_SHAPE, name='state_input', batch_shape=(1, 210, 160, 3))
state_Conv2D_1 = Conv2D(8, kernel_size=(8, 8), strides=(4, 4), activation='relu', name='state_Conv2D_1')(state_input)
state_MaxPooling2D_1 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name='state_MaxPooling2D_1')(state_Conv2D_1)
state_outputs = Flatten(name='state_Flatten')(state_MaxPooling2D_1)
state_convolution_model = Model(state_input, state_outputs, name='state_convolution_model')
state_convolution_model.compile(optimizer='adam', loss='mean_squared_error', metrics=['acc'])
state_convolution_model_input = Input(shape=INPUT_SHAPE, name='state_convolution_model_input', batch_shape=(1, 210, 160, 3))
state_convolution = state_convolution_model(state_convolution_model_input)
# classification output
classficication_Input = Input(shape=(1, LSTM_OUTPUT_DIM), batch_shape=(1, LSTM_OUTPUT_DIM), name='classification_prediction_Input')
classficication_Dense_1 = Dense(32, activation='relu', name='classification_prediction_Dense_1')(classficication_Input)
classficication_output_raw = Dense(ACTIONS, activation='sigmoid', name='classification_output_raw')(classficication_Dense_1)
classficication_output = Reshape((ACTIONS,), name='classification_output')(classficication_output_raw)
classficication_model = Model(classficication_Input, classficication_output, name='classificationPrediction_model')
classficication_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
classficicationPrediction = classficication_model(state_convolution)
i = keras.layers.concatenate([state_outputs, classficication_output], name='concatenate')
d = Dense(32, activation='relu')(i)
o = Dense(1, activation='sigmoid')(d)
model = Model(state_input, o) # <-- graph error is here
plot_model(model, to_file='model.png', show_shapes=True)
【问题讨论】:
-
什么是 LSTM_OUTPUT_DIM、ACTIONS?您能否发布一个最小的工作示例,以便我可以运行它并重现错误?
-
整数。可以是 64 (LSTM_OUTPUT_DIM) 和 4 (ACTIONS)
标签: python machine-learning keras neural-network