keras 获取某层输出 获取复用层的多次输出实例
官方文档很全面,搜索功能也很好。但是如果你想单独实现某个功能,根本无从搜寻。于是我写了这个笔记。从功能出发。
两个tensor经过一个layer实例会产生两个输出。
a=Input(shape=(280,256)) b=Input(shape=(280,256)) lstm=LSTM(32) encoded_a=lstm(a) encoded_b=lstm(b) lstm.output
这个代码有错误,因为最后一行没有指定lstm这个layer实例的那个输出。
>>AttributeError:Layerlstm_1hasmultipleinboundnodes, hencethenotionof"layeroutput"isill-defined. Use`get_output_at(node_index)`instead.
所以如果想要得到多个输出中的一个:
assertlstm.get_output_at(0)==encoded_a
assertlstm.get_output_at(1)==encoded_b
补充知识:kears训练中如何实时输出卷积层的结果?
在训练unet模型时,发现预测结果和真实结果几乎完全差距太大,想着打印每层输出的结果查看问题在哪?
但是发现kears只是提供了训练完成后在模型测试时输出每层的函数。并没有提供训练时的函数,同时本着不对原有代码进行太大改动。最后实现了这个方法。
即新建一个输出节点添加到现有的网络结构里面。
#新建一个打印层。 classPrintLayer(Layer): #初始化方法,不须改变 def__init__(self,**kwargs): super(PrintLayer,self).__init__(**kwargs) #调用该层时执行的方法 defcall(self,x): x=tf.Print(x,[x],message="xis:",summarize=65536) #调用tf的Print方法打印tensor方法,第一个参数为输入的x,第二个参数为要输出的参数,summarize参数为输出的元素个数。 returnx; #一定要返回tf.Print()函数返回的变量,不要直接使用传入的变量。 #接着在网络中引入 conv9=Conv2D(2,3,activation='relu',padding='same',kernel_initializer='he_normal')(conv9) print11=PrintLayer()(conv9) conv10=Conv2D(1,1,activation='sigmoid')(print11) #PrintLayer层处理的结果一定要在下一层用到,不然不会打印tensor。该结点可以加在任何结点之间。
以上这篇keras获取某层输出获取复用层的多次输出实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。