TensorFlowを使って単純な線形回帰を計算すると、w、b、lossを含む[nan]が得られます。ここでTensorFlowを使って単純な線形回帰を計算すると、なぜ[nan]が得られますか?
は私のコードです:
import tensorflow as tf
w = tf.Variable(tf.zeros([1]), tf.float32)
b = tf.Variable(tf.zeros([1]), tf.float32)
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
liner = w*x+b
loss = tf.reduce_sum(tf.square(liner-y))
train = tf.train.GradientDescentOptimizer(1).minimize(loss)
sess = tf.Session()
x_data = [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000]
y_data = [265000, 324000, 340000, 412000, 436000, 490000, 574000, 585000, 680000]
sess.run(tf.global_variables_initializer())
for i in range(1000):
sess.run(train, {x: x_data, y: y_data})
nw, nb, nloss = sess.run([w, b, loss], {x: x_data, y: y_data})
print(nw, nb, nloss)
出力:
[ nan] [ nan] nan
Process finished with exit code 0
は、なぜこれが起こるんし、どのように私はそれを修正することができますか?
私のデータを1000で割ると、それは働くことができます。しかし、それは以前にはうまくいかなかったのですか? –
これは主に1000が何の情報も提供しておらず、大きな学習率でフロートオーバーフローを起こしていたからです。このおもちゃの例でも、値を正規化するのがどのように良いかを示しています。 – user3217278