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

问题描述 投票:0回答:1

我是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()函数的示例(例如,解释here但使用add()函数。有没有办法检查每个层的输出而不将它们添加到模型本身(因为它也可以用Tensorflow完成,进行会话)?

keras output layer
1个回答
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)查看中间层
© www.soinside.com 2019 - 2024. All rights reserved.