有时候在训练网络的时候我们需要运用之前训练好的结果但是又不想经历 “训练-存储模型-加载模型-应用”这样繁琐的过程时,同时 在循环过程中我们可以在几次for循环时避免初始化所有变量在循环中使用网络中已训练好的参数如权重、偏置值b等,只初始化学习率这样的外围超参数,这样就可以避免前面的繁琐循环。这里就是介绍只单个初始化变量,方法简单,只是一开始没想到,记录下来:
# 第一步和正常定义一样,就是定义变量的初始化方式,如:
learning_rate = tf.train.exponential_decay(0.01,global_step,50,0.96)
for XXX:
...
#这样就只对学习率进行初始化,避免初始化所有变量把之前训练的网络权重也初始化导致训练结果没了的窘境。
sess.run(learning_rate.initializer)
...
...
函数的功能及其中参数的含义:
这里定义的是学习率的指数下降法,0.01即学习率的初始值,global_step 是全局开始计数的起始步数,这个参数也要在之前定义好的,一般为0,即从一开始就开始计步;50表示每五十步进行一次学习了的衰减,衰减率为0.96,即衰减到上一次的96%,也就是0.96的含义。
除此之外,还有前面所提到的单个变量的初始化(v.initializer)
可以查询哪些变量尚未初始化。例如,以下代码会打印所有尚未初始化的变量名称:
print(sess.run(tf.report_uninitialized_variables()))