Tensorflow Weights Diverge或NaN

时间:2017-04-26 14:14:29

标签: tensorflow

我通过实施简单的线性回归首次尝试张量流。而不是收敛,我的权重在几次迭代中分散到无穷大。

首先我初始化我的数据

import tensorflow as tf
import numpy as np
T = 100
noise = 10*np.random.random(size=T).astype(np.float32)
x = np.array([np.arange(T), np.ones(T)]).astype(np.float32)
w = np.array([[2,4]]).astype(np.float32)
y = w.dot(x) + noise
w.dot(x)

然后我创建了tensorflow变量:

X = tf.placeholder(tf.float32, [2, T], name="X")
W = tf.Variable(tf.ones([1,2]), name="W")
Yhat = tf.matmul(W,X)
Y = tf.placeholder(tf.float32, [1,T], name="Y")
MSE = (1./(2*T))*tf.reduce_sum(tf.pow(Y-Yhat, 2))

然后训练模型

sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
trainer = tf.train.GradientDescentOptimizer(0.5).minimize(MSE)
for _ in range(100):
    sess.run(trainer, feed_dict={X: x, Y: y})
    print sess.run(MSE,feed_dict={X: x, Y: y})

我得到了输出

5.55387e+09
1.49582e+16
4.02866e+22
1.08503e+29
2.9223e+35
inf
inf
inf
inf
inf
inf
nan
nan

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

由于学习率太高(0.5),体重会分散并增长到NaN(Inf)。我已经删除了你的代码并将学习率设置为0.0005,网络可以工作。 还有另一种处理学习率问题的方法,如果您不确定哪种学习率更好,请尝试使用AdamOptimizer而不是GradientDescentOptimizer。

答案 1 :(得分:0)

如果您在训练期间看到您的损失增加或看到NaN,请务必先检查您的学习率!

如果您仍有问题,您还可以在训练时看到渐变的值!