1

線形回帰のためのテンソルフロープログラムです。私は最適化(最小化)損失関数のためにGradient Descentアルゴリズムを使用しています。しかし、プログラムを実行している間、損失関数の価値は増加しています。私のプログラムと出力は以下の通りです。私のプログラムのためのTensorflow - 線形回帰

import tensorflow as tf 
    W = tf.Variable([.3],dtype=tf.float32) 
    b = tf.Variable([-.3],dtype=tf.float32) 
    X = tf.placeholder(tf.float32) 
    Y = tf.placeholder(tf.float32) 
    sess = tf.Session() 
    init = init = tf.global_variables_initializer() 
    sess.run(init) 
    lm = W*X + b 
    delta = tf.square(lm-Y) 
    loss = tf.reduce_sum(delta) 
    optimizer = tf.train.GradientDescentOptimizer(0.01) 
    train = optimizer.minimize(loss) 
    for i in range(8): 
     print(sess.run([W, b])) 
     print("loss= %f" %sess.run(loss,{X:[10,20,30,40],Y:[1,2,3,4]})) 
     sess.run(train, {X: [10,20,30,40],Y: [1,2,3,4]}) 
    sess.close() 

出力は

2017-12-07 14:50:10.517685: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations. 

[array([ 0.30000001], dtype=float32), array([-0.30000001],dtype=float32)] 
loss= 108.359993 

[array([-11.09999943], dtype=float32), array([-0.676], dtype=float32)] 
loss= 377836.000000 

[array([ 662.25195312], dtype=float32), array([ 21.77807617], dtype=float32)] 
loss= 1318221568.000000 

[array([-39110.421875], dtype=float32), array([-1304.26794434], dtype=float32)] 
loss= 4599107289088.000000 

[array([ 2310129.25], dtype=float32), array([ 77021.109375], dtype=float32)] 
loss= 16045701465112576.000000 
[array([ -1.36451664e+08], dtype=float32), array([-4549399.], dtype=float32)] 
loss= 55981405829796462592.000000 

[array([ 8.05974733e+09], dtype=float32), array([ 2.68717856e+08], dtype=float32)] 
loss= 195312036582209632600064.000000 

は私の損失の値が減少するのではなく、増加している理由の答えを提供してくださいです。

答えて

1

学習率を変更してみましたか?より低いランニングレート(〜1e-4)を使用すると、より多くの反復が機能するはずです。

低い学習率が必要な理由について、より正当な理由があります。あなたの損失関数が

L = \和(Wxを+による)^ 2

あるとDL/dWが= \合計2(Wxを+による)* xの

とヘッセ行列D^2Lことに注意してください/ d^2W = \ sum 2x * x

ここで、学習率は約1 /(2 * 2900)となるhessianの逆数以上であるため、あなたの損失は発散しています。だからここで学習率を下げて下げるべきです。

注:StackOverflowの答えに数学を追加する方法がわからないので、この方法で追加する必要がありました。

+1

合意。学習率を下げると、損失が改善されます。 –