python - Tensorflow 无法正确识别列表中的数字

标签 python list tensorflow

您好,我遇到了一个问题,即 Tensorflow 不喜欢我为训练数据选择的数字。我从 Tensorflow“入门”教程中借用了代码,但我用另一个坐标替换了 x_trainy_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))

现在代码为列表 x_trainy_train 中的那些值输出 Nan。它工作的原始 x_trainy_train 数据是

x_train = [1,2,3,4]
y_train = [0,-1,-2,-3]

编辑:我期望 Wb 的值分别收敛到 2.5 和 7.0。

最佳答案

问题在于优化器的学习率。由于您已将输入更改为一些规模非常不同的数组,因此模型的适当学习率也不同。您可以对输入使用某种归一化技术来避免此类问题,但在这种情况下,您可以调整学习率,直到找到正确的值。经过几次测试,我发现在您的情况下,像 1e-5 这样的东西应该可以工作:

optimizer = tf.train.GradientDescentOptimizer(1e-5)

更一般地说,这种情况下的问题是您的输入分布很不均匀。大多数示例都低于 40,但是您有几个大约 100 和一个超过 200;后三者对训练更新的影响比其他所有的都大,因此,例如,如果其中一个有一些噪声,它将对整个模型产生很大影响。

关于python - Tensorflow 无法正确识别列表中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45081877/

相关文章:

python 正则表达式 : re. findall() 的行为不按预期进行交替

list - Dart:.toList() 和转换为 List 有什么区别

tensorflow - MultiWorkerMirroredStrategy 启动 GRPC 服务器后挂起

tensorflow - 如何使用TensorBoard分析结果并降低均方误差

添加第二个 GPU 后 TensorFlow 无法工作(CUDNN_STATUS_INTERNAL_ERROR)

python - 无需命令行使用 Py2Exe

python - 将 17GB JSON 文件转换为 numpy 数组

python - 在 Python 中将 `if` 添加到生成器表达式的正确方法是什么?

java - 实例化类时抛出异常

java - 从 EditText 将输入的项目添加到列表(使用 SimpleAdapter)