Tensorflow 自定义loss的情况下初始化部分变量方式
一般情况下,tensorflow里面变量初始化过程为:
#variables........... #..................... init=tf.initialize_all_variables() sess.run(init)
这里tf.initialize_all_variables()会初始化所有的变量。
实际过程中,假设有a,b,c三个变量,其中a已经被初始化了,只想单独初始化b,c,那么:
#variables... ... init=tf.variables_initializer([b,c]) sess.run(init)
此外,如果自行修改了optimizer,如下代码就会报错:
#definitionofvariablesa,b,c... .... my_optimizer=tf.train.RMSProp(learning_rate=0.1).minimize(my_cost) init=tf.variables_initializer([b,c]) sess.run(init)
这是因为自己定义的optimizer会生成新的variables,但是在init里面并没有初始化,所以无法访问,会报错。解决方法如下:
a=tf.Variables(...)#lineN temp=set(tf.all_variables()) b=tf.Variables(...) c=tf.Variables(...) #definitionofmyoptimizer optimizer=tf.train....... init=tf.variables_initializer(set(tf.all_varialbles())-temp)#lineM sess.run(init)
首先,temp=set(tf.all_variables())将该行(lineN)代码之前的所有变量保存在temp中,接下来定义变量b,c,以及自定义的optimizer,然后set(tf.all_varialbles()存储了改行(lineM)之前的所有变量(包括optimizer生成的变量以及temp中所含的变量),set(tf.all_varialbles())-temp相减得到lineN~M这几行定义的变量。
以上这篇Tensorflow自定义loss的情况下初始化部分变量方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。