我的体重定义为
weights = {
'W_conv1': tf.get_variable('W_conv1', shape=[...], dtype=tf.float32, initializer=tf.truncated_normal_initializer(stddev=0.01)),
'W_conv2': tf.get_variable('W_conv2', shape=[...], dtype=tf.float32, initializer=tf.truncated_normal_initializer(stddev=0.01)),
'W_conv3': tf.get_variable('W_conv3', shape=[...], dtype=tf.float32, initializer=tf.truncated_normal_initializer(stddev=0.01)),
...
}
# conv2d network
...
我想使用权重衰减,所以我添加了例如参数
regularizer=tf.contrib.layers.l1_regularizer(0.0005)
到tf.get_variable
。现在,我想知道在评估阶段这是否仍然正确,或者我是否必须将正则化因子设置为0。
还有另一个参数trainable
。文档说If True also add the variable to the graph collection GraphKeys.TRAINABLE_VARIABLES.
对我来说还不清楚。我应该使用它吗?
有人可以向我解释权重衰减是否以某种错误的方式影响评估步骤?在这种情况下我该如何解决?
答案 0 :(得分:1)
在反向传播训练期间,在权重更新步骤中使用权重衰减。评估过程中没有这样的权重更新,因此在评估过程中没有任何影响。关于可训练的论点,我认为官方文档的摘录很简洁
建立机器学习模型时,通常很方便 区分持有可训练模型参数的变量 和其他变量,例如用于计算的全局步骤变量 培训步骤。为了使此操作更容易,变量构造函数支持 一个trainable =参数。如果为True,则还会添加新变量 到图形集合GraphKeys.TRAINABLE_VARIABLES。便利 函数trainable_variables()返回此内容 采集。各种Optimizer类都将此集合用作 要优化的默认变量列表。
因此,为方便起见,您可以添加它,但这不是必需的。