che*_*chi 5 machine-learning tensorflow tensorboard
在Tensorflow中,我正在尝试构建一个模型来执行图像超分辨率(即回归任务)并使用TensorBoard分析结果.在训练期间,我发现均方误差(MSE)在大多数时间(甚至从头开始)在100到200之间反弹,并且从未收敛过.我希望将以下变量添加到tf.summary并分析导致此问题的原因.
graph_loss = get_graph_mean_square_error()
tf.summary.scalar('graph_loss', graph_loss)
regularization_loss = tf.add_n([tf.nn.l2_loss(weight) for weight in weights]) * regularization_param
tf.summary.scalar('reg_loss', regularization_loss)
tf.summary.scalar('overall_loss', regularization_loss + graph_loss)
for index in range(len(weights)):
tf.summary.histogram("weight[%02d]" % index, weights[index])
optimizer = tf.train.AdamOptimizer()
capped_grad_and_vars = [(tf.clip_by_value(grad, -clip_value, clip_value), var) for grad, var in grad_and_vars if grad is not None]
train_optimizer = optimizer.apply_gradients(capped_grad_and_vars, global_step)
for grad, var in grad_and_vars:
tf.summary.histogram(var.name + '/gradient', grad)
for grad, var in capped_grad_and_vars:
tf.summary.histogram(var.name + '/capped_gradient', grad)
Run Code Online (Sandbox Code Playgroud)
该模型是具有跳过连接的ResNET,其包含多个[卷积 - >批量标准化 - > ReLU]重复层.在"分发"选项卡中,我可以看到添加了以下模式的多个图形:
我看到的东西很少,并希望有人对它们有所了解:
使用L2损失进行正则化
将值regularization_param设置为0.0001,reg_loss图表显示它从1.5增加(如对数)并收敛于3.5左右.在我的情况下,graph_loss介于100和200之间,而reg_loss介于1.5到3.5之间.
reg_loss我们正在寻找图形的趋势(如对数增加函数)?reg_loss太小惩罚模型(100-200 VS 1.5-3.5)?regularization_param是否选择正确?解决消失的梯度问题
我认为从开始到结束的MSE弹跳问题可能是由于渐变问题消失所致.我希望使用几种技术,如ResNET,跳过连接,批量标准化和梯度限幅(clip_by_value0.05)来解决消失的渐变问题.我不太清楚如何阅读图表,但在我看来,前20个步骤中前22个图层的权重似乎没有变化(我不熟悉TensorBoard,如果我读/解,请纠正我它不正确):
我已将训练分成几次运行并从上一次运行中恢复检查点.以下是最后几层66K步骤后的图表:
您可以看到,在前几个20K步骤中,权重在某些层上仍然会发生变化,例如weight_36_和weight_37_(橙色).但是,在50K步骤之后,所有重量看起来都像flat_36_(非常薄)和weight_39_(厚度很小)一样是绿色的.
然后我查看批量标准化图(注意capped_gradient是clip_by_value0.05),看起来有一些变化,如下所示:
欢迎任何其他建议:)
reg_loss我们正在寻找的图形趋势(如对数>递增函数)?
是的,看起来还不错。
- 是否
reg_loss太小而无法对模型进行惩罚(100-200 vs 1.5-3.5)?- 我怎么知道我的选择是否
regularization_param正确?
首先,我建议您将学习率从 0.001 更改为 0.1(这是研究梯度裁剪问题的第一件事),并观察平均 MSE 是否会降低以选择没有 的最佳学习率reg_loss。然后你可以通过微调来添加正则化reg_loss。
- 请问,有人可以解释一下上图是否正确吗?(我不明白为什么每次批量归一化后都有一些好的值,但权重似乎没有改变)
- 自始至终解决MSE跳票问题应该朝哪个方向看?
请仔细检查您是否采用每个时期的平均MSE。有时在每个子时期观察到弹跳问题可能是正常的。但如果你取每个时期的平均 MSE,你可能会发现它会逐渐下降。
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |