如何通过Sequential()函数获取未连接的中间层的输出?

时间:2018-02-28 14:31:27

标签: keras output layer

我是Keras的新人,但之前我曾使用纯粹的tensorflow。我正在尝试调试下面的一些网络(我只会复制一个片段。丢失函数,优化器等对我来说对于这段代码并不重要)

#Block 1 (Conv,relu,batch) starts with 800 x 400
main_input = LNN.Input(shape=((800,400,5)),name='main_input')
enc_conv1 = LNN.Convolution2D(8,3,padding='same',activation='relu')(main_input)
enc_bn1 = LNN.BatchNormalization(axis=1)(enc_conv1)

#Block 2 (Conv,relu,batch) starts with 400 x 200
maxp1_4 = LNN.MaxPooling2D(strides=2)(enc_bn1)
enc_conv2 = LNN.Convolution2D(16,3,padding='same',activation='relu')(maxp1_4)
enc_bn2 = LNN.BatchNormalization(axis=1)(enc_conv2)
enc_conv3 = LNN.Convolution2D(16,3,padding='same',activation='relu')(enc_bn2)
enc_bn3 = LNN.BatchNormalization(axis=1)(enc_conv3)
concat1_5 = LNN.concatenate(axis=3,inputs=[enc_bn3,maxp1_4])

我已经看到了一些示例,说明如何将每个操作添加到Sequential()函数中(例如,使用add {)函数解释here。有没有办法检查输出每个层没有将它们添加到模型本身(因为它也可以使用Tensorflow,进行会话)?

1 个答案:

答案 0 :(得分:0)

最好是制作一个输出这些图层的模型:

modelToOutputAll = Model(main_input, [enc_conv1, enc_bn1, maxp1_4, enc_conv2, enc_bn2, enc_conv3, enc_bn3, concat1_5])

对于培训,请保留仅包含最终输出的模型:

modelForTraining = Model(main_input,concat1_5)

两个模型都使用完全相同的权重,因此训练一个改变另一个。你可以用每一个来做你目前所需要的。

  • 使用modelForTraining.fit(xTrain,yTrain, ...)
  • 训练
  • 使用modelToOutputAll.predict(xInput)
  • 查看中间层