在tensorflow中使用梯度下降优化器时获取变量的“nan”

在tensorflow中使用梯度下降优化器时获取变量的“nan”,tensorflow,Tensorflow,我试图做一些非常类似于tensorflow主页上的“入门”教程的事情。然而,在使用本教程中使用的梯度下降训练器时,我的变量不断得到nan 有人能帮我找出原因吗 import tensorflow as tf import random def generate_data(sample_count, slope, intercept, epsilon, min_x, max_x): xs = [random.uniform(min_x, max_x) for _ in range(sam

我试图做一些非常类似于tensorflow主页上的“入门”教程的事情。然而,在使用本教程中使用的梯度下降训练器时,我的变量不断得到
nan

有人能帮我找出原因吗

import tensorflow as tf
import random

def generate_data(sample_count, slope, intercept, epsilon, min_x, max_x):
    xs = [random.uniform(min_x, max_x) for _ in range(sample_count)]
    ys = [slope * x + intercept + random.uniform(-epsilon, epsilon) for x in xs]
    return xs, ys

# Create Data
sample_count = 1000
slope = 3
intercept = 0 
epsilon = 20
min_x = 0
max_x = 100

xs, ys = generate_data(sample_count, slope, intercept, epsilon, min_x, max_x)

# Linear Model
initial_m = 1.
initial_b = 0.

x = tf.placeholder(tf.float32)
m = tf.Variable(initial_m, tf.float32)
b = tf.Variable(initial_b, tf.float32)
linear_model = m * x + b

# Loss Function
y = tf.placeholder(tf.float32)
loss = tf.reduce_sum(tf.square(y - linear_model))

# Train Model
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
training_iterations = 100

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for _ in range(training_iterations):
        sess.run(train, {x: xs, y: ys})

    results = sess.run([m, b])
    print('true m: {} b: {}'.format(slope, intercept))
    print('optimized m: {} b: {}'.format(results[0], results[1]))

您应该使用
reduce\u mean
而不是
reduce\u sum
(1),和/或降低学习率


(1) 他们称之为“均方误差”

你应该使用
减少平均值
,而不是
减少总和
(1),和/或降低学习率


(1) 他们称之为“均方误差”

哦,好吧,那么我猜我的和“溢出”了浮点数?我把它换成了mean,当我允许max_x为100时,仍然得到nan。如果我把它改成10,它就可以工作了。有点奇怪。@zrbecker你并没有超出总数本身。你正在有效地使用一个巨大的学习率。我如何计算我应该使用的学习率?为什么那个是“巨大的”?入门教程使用了它,所以我想,也许对于我正在做的事情来说,这是一个很好的使用方法。lol.@zrbecker“我如何计算出我应该使用的学习率?”通常,这是经验性的和/或基于经验的。虽然在你的特殊情况下,你可以通过分析找到最优的lr。哦,好吧,那么我猜我的和“溢出”了浮点数?我把它换成了mean,当我允许max_x为100时,仍然得到nan。如果我把它改成10,它就可以工作了。有点奇怪。@zrbecker你并没有超出总数本身。你正在有效地使用一个巨大的学习率。我如何计算我应该使用的学习率?为什么那个是“巨大的”?入门教程使用了它,所以我想,也许对于我正在做的事情来说,这是一个很好的使用方法。lol.@zrbecker“我如何计算出我应该使用的学习率?”通常,这是经验性的和/或基于经验的。虽然在您的特殊情况下,您可以通过分析找到最佳lr。