我的权重定义如下:
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
。文档中说如果为True,还会将变量添加到图集合GraphKeys.TRAINABLE_VARIABLES中。
这让我不太明白。我应该使用它吗?
能有人解释一下权重衰减是否会以某种错误的方式影响评估步骤吗?如果是这种情况,我该如何解决?
回答:
权重衰减是在训练过程中反向传播的权重更新步骤中使用的。在评估过程中没有这样的权重更新,因此在评估期间它没有任何影响。至于trainable
参数,我认为官方文档中的这一段话非常简洁
在构建机器学习模型时,区分保存可训练模型参数的变量和其他变量(如用于计数训练步骤的全局步长变量)通常很方便。为了简化这一过程,变量构造函数支持
trainable=
参数。如果为True,新变量也会被添加到图集合GraphKeys.TRAINABLE_VARIABLES中。便利函数trainable_variables()
返回此集合的内容。各种Optimizer类使用此集合作为要优化的变量的默认列表。
所以你可以为了方便而添加它,但这不是强制性的。