keras的回调函数中Model的使用

keras的回调函数中Model的使用

使用keras的时候,需要使用回调函数来显示每一个epoch中想要的metric,比方说自己设计的准确率或者其他指标之类的。我把自己如何使用回调函数写下来分享一下,如果有错误,请大家多多指正。

使用回调函数时往往要用到keras的Model()
如果搭建网络的时候,是一层一层网络堆叠起来,可以给想要得到输出的那个中间层起一个名字,然后得到这个中间层的输出,利用模型的输入和中间层的输出构建一个模型来进行预测

model = Model(inputs=self.model.input,outputs=self.model.get_layer(name='指定输出层的名字').output
output=model.predict(X_test)

有的时候,搭建的模型并不是这种的,举例来说,VAE中把Encoder和Decoder分别搭建成一个模型,然后再来训练。
假如这个Encoder是有多个输出的话,按上面构建encoder的话

model = Model(inputs=self.model.input,outputs=self.model.get_layer(name='Encoder').output
output=model.predict(X_test)

这种情况会报错

AttributeError: Encoder has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use `get_output_at(node_index)` instead.

这个时候的话,需要指定具体是哪个node,比如可以改成这样

model = Model(inputs=self.model.input,outputs=self.model.get_layer(name='Encoder').get_output_at(0))
output=model.predict(X_test)

这个时候我要搭建Decoder的话,又遇到了新的问题,就是decoder的输入并不是模型的整体输入,所以此时,这个输入需要指定为decoder的输入

model = Model(inputs=self.model.get_layer('Decoder').input,outputs=self.model.get_layer(name='Decoder').get_output_at(0))
output=model.predict(X_test)

如果报错了的话,代表你的decoder的输入也有多个节点,可以将代码改成如下:

model = Model(inputs=self.model.get_layer('Decoder').get_input_at(0),outputs=self.model.get_layer(name='Decoder').get_output_at(0))
output=model.predict(X_test)

你可能感兴趣的:(keras使用,python,keras,深度学习,深度学习)