python - 评估步骤的权重衰减 - Tensorflow
问题描述
我的体重定义为
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.
我不清楚。我应该使用它吗?
有人可以向我解释权重衰减是否以某种错误的方式影响评估步骤?在这种情况下我该如何解决?
解决方案
权重衰减用于反向传播训练期间的权重更新步骤。评估过程中没有这样的权重更新,因此在评估过程中没有任何影响。至于可训练的论点,我认为官方文档的这段摘录非常简洁
在构建机器学习模型时,通常可以方便地区分包含可训练模型参数的变量和其他变量,例如用于计算训练步数的全局步长变量。为了使这更容易,变量构造函数支持 trainable= 参数。如果为 True,则新变量也将添加到图形集合 GraphKeys.TRAINABLE_VARIABLES。便利函数 trainable_variables() 返回此集合的内容。各种优化器类使用此集合作为要优化的变量的默认列表。
因此,您可以为方便起见添加它,但它不是强制性的。
推荐阅读
- git - 在比较它们之间的差异后,如何使用旧的 git 标签更新我当前的 master 分支?
- linux - 是否可以将消息“推送”到活动的 bash 终端?
- uwp - UWP 通过选择其笔划来更改椭圆宽度高度
- embedded - STM32F446板载温度传感器,定时器配置问题
- ios - 在 Nativescript 应用程序中修改 Podfile
- sql - 如果数据在表中持续超过 12 小时,则发送电子邮件,SQL
- c++ - 有没有办法为 char 数组分配堆栈内存?但是,鉴于长度是已知的,但是稍后会添加内容?
- tfs - 添加nuget包时不会自动安装依赖项
- python - 如何排序字典的键
- python-3.x - 使用相同的 credentials.json 在 python 中访问 google drive/google sheet api