我使用Tensorflow DNNRegressor Estimator模型制作神经网络。但是调用estimator.train()
函数给出的输出如下:
即。我的损失功能随着每一步都变化很大。但据我所知,我的损失函数应该减少而没有迭代。另外,找到Tensorboard Visualization for loss function的附加屏幕截图:
我无法弄清楚的疑问是:
答案 0 :(得分:2)
首先,我要指出tf.contrib.learn.DNNRegressor
使用带mean_squared_loss
的线性回归头,即简单的L2丢失。
是否是整体损失函数值(每个的综合损失 步骤处理到现在)或只是该步骤的损失值?
图表上的每个点都是到目前为止学习后最后一步的损失函数的值。
如果是该步骤的损失值,那么如何获得整体损失的价值 功能和看到它的趋势,我觉得应该减少 不增加迭代次数?
没有整体损失功能,可能你的意思是图表在每一步之后损失如何变化。这正是张量板向您展示的内容。你是对的,它的趋势并非如此。这表明你的神经网络没有学习。
如果这是整体损失价值,那为什么它会如此波动?我错过了什么吗?
神经网络不学习的一个常见原因是超参数的选择很差(尽管你可以做there are many more mistakes)。例如:
我通常做的是检查神经网络是否至少在某种程度上起作用,将训练集减少到几个例子,并尝试过度拟合网络。这个实验非常快,所以我可以尝试各种学习率,初始化方差和其他参数来找到最佳点。一旦我有一个稳定下降的损失图表,我继续更大的设置。
答案 1 :(得分:0)
虽然之前的评论信息量很大且很好,但它并没有完全解决您的问题。实例化DNNRegressor时,添加: loss_reduction = tf.losses.Reduction.MEAN 在构造函数中,您将看到平均损失,收敛。
estimator = tf.estimator.DNNRegressor(
feature_columns=feat_clmns,
hidden_units=[32, 64, 32],
weight_column=weight_clmn,
**loss_reduction=tf.losses.Reduction.MEAN**