您好我遇到了Tensorflow不喜欢我为训练数据选择的数字的问题。我已经从Tensorflow“入门”教程中借用了代码,但我已经将x_train
和y_train
坐标数据列表与另一个坐标相关联。
import numpy as np
import tensorflow as tf
# Model parameters
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
# Model input and output
x = tf.placeholder(tf.float32)
linear_model = W * x + b
y = tf.placeholder(tf.float32)
# loss
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
# optimizer
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
# training data
x_train = [1.0, 1.5 ,3.0, 6.0, 8.0, 9.0, 11.0, 12.0,38.0 ,41.0, 82.0]
y_train = [9.5,10.75,14.5,22.0,27.0,29.5,34.5,37,102.0,109.5,212.0]
# training loop
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
#print(sess.run(init))
for i in range(1000):
sess.run(train, {x:x_train, y:y_train})
# evaluate training accuracy
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x:x_train, y:y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
现在,代码会为列表Nan
和x_train
中的值输出y_train
。它适用的原始x_train
和y_train
数据是
x_train = [1,2,3,4]
y_train = [0,-1,-2,-3]
编辑:我期待W
和b
的值分别收敛到2.5和7.0。
答案 0 :(得分:1)
问题在于优化器的学习率。由于您已将输入更改为具有非常不同比例的某些数组,因此模型的适当学习速率是不同的。您可以在输入中使用一些规范化技术来避免此类问题,但在这种情况下,您可以调整学习速率,直到找到正确的值。经过几次测试后,我发现在你的情况下,像1e-5这样的东西应该可以工作:
optimizer = tf.train.GradientDescentOptimizer(1e-5)
更一般地说,这种情况下的问题是你的输入分布很不均匀。大多数例子都在40以下,但是你有大约100个,一个超过200个;这些最后三个对训练更新的影响将大于其他所有,因此,例如,如果其中一个有一些噪音,它将对整个模型产生很大的影响。