2017-12-07 5 views
0

最適化問題を解決したいと思いますが、オプティマイザは機能しません。私は与えられた値との差が最小である一連の解を期待していますが、私の計算されたsoftmax関数は常に1です。重みと偏りは反復では更新されないからです。どちらもゼロのテンソルです。この問題を解決するにはどうすればよいですか?オプティマイザは変数を最適化しません

#KI-Model 
x = tf.placeholder(tf.float32, [None, 5], name='input') #x_1-x_5 


#Init 
W = tf.Variable(tf.zeros([5,1]), dtype=tf.float32) 
b = tf.Variable(tf.zeros([1]), dtype=tf.float32) 

#Sigmoid 
y = tf.nn.softmax(tf.matmul(x, W) + b) 

#Training 
y_tensor = tf.placeholder(tf.float32, [None, 1], name='output') 

loss = y-y_tensor 
cost = tf.square(loss) 
optimizer = tf.train.GradientDescentOptimizer(0.003).minimize(cost) 


#Start 
session = tf.Session() 
init = tf.global_variables_initializer() 
session.run(init) 


#init first 1000 training_batches 
for i in range(1000): 
    batch_xs.append([dataA[i], dataB[i], dataC[i], dataD[i], 
       dataE[i]]) 
    batch_ys.append([solution[i]]) 

for i in range(10000): 

    session.run(optimizer, feed_dict={x:batch_xs, y_tensor:batch_ys}) 

print(session.run(y, feed_dict={x:batch_xs, y_tensor:batch_ys})) 

答えて

0

グラデーションを計算して適用しませんでした。 これらの行は行方不明になっています

gradients = optimizer.compute_gradients(loss=cost) 
train_step = optimizer.apply_gradients(grads_and_vars=gradients) 

あなたもこのラインで、各反復での列車のステップを実行する必要があります。

session.run(train_step, feed_dict={x:batch_xs, y_tensor:batch_ys}) 

フル正しいコード:

#KI-Model 
x = tf.placeholder(tf.float32, [None, 5], name='input') #x_1-x_5 


#Init 
W = tf.Variable(tf.zeros([5,1]), dtype=tf.float32) 
b = tf.Variable(tf.zeros([1]), dtype=tf.float32) 

#Sigmoid 
y = tf.nn.softmax(tf.matmul(x, W) + b) 

#Training 
y_tensor = tf.placeholder(tf.float32, [None, 1], name='output') 

loss = y-y_tensor 
cost = tf.square(loss) 
optimizer = tf.train.GradientDescentOptimizer(0.003) 
gradients = optimizer.compute_gradients(loss=cost) 
train_step = optimizer.apply_gradients(grads_and_vars=gradients) 

#Start 
session = tf.Session() 
init = tf.global_variables_initializer() 
session.run(init) 


#init first 1000 training_batches 
for i in range(1000): 
    batch_xs.append([dataA[i], dataB[i], dataC[i], dataD[i], 
       dataE[i]]) 
    batch_ys.append([solution[i]]) 

for i in range(10000): 

    session.run(train_step, feed_dict={x:batch_xs, y_tensor:batch_ys}) 

print(session.run(y, feed_dict={x:batch_xs, y_tensor:batch_ys})) 
+0

こんにちは、あなたの答えをありがとう、マタン。効果は同じです。計算されたfunktionは常に1であり、偏りと重みは更新されませんでした。私が現時点で見る問題は次のとおりです。入力値が1から離れており、出力値も1から離れています。計算された関数はシグモイド関数の線形結合です。これらの関数は最大値が1に達します。これにより、複数のシグモイド関数の組み合わせが最大で1になります。だから、私は1を超えることはできませんが、それは回帰の最も適した値です。数学の問題と思われる – USBstick

関連する問題