2016-07-30 6 views
0
import tensorflow as tf 

tf_X = tf.placeholder("float",[None,3073]) 
tf_Y = tf.placeholder("float",[None,10]) 
tf_W = tf.Variable(0.001*tf.random_normal([3073,10])) 

#tf.random_uniform([3073,10],-0.1,0.1)# 
tf_learning_rate = 0.0001 

hypothesis = tf.nn.softmax(tf.matmul(tf_X,tf_W)) #out put is softmax value for each class 

cost = tf.reduce_mean(tf.reduce_sum(tf_Y*-tf.log(hypothesis), reduction_indices=1)) 

optimizer = tf.train.GradientDescentOptimizer(tf_learning_rate).minimize(cost) 

init = tf.initialize_all_variables() 



with tf.Session() as sess: 
    sess.run(init) 
    print sess.run(cost, feed_dict = {tf_X:X_dev,tf_Y:onehot_y_dev}) 
    print sess.run 
    for step in xrange(400): 

     sess.run(optimizer, feed_dict = {tf_X:X_dev,tf_Y:onehot_y_dev}) # we have to make one hot coding for y 
     if step % 200 ==0: 
      print step,sess.run(cost, feed_dict={tf_X:X_dev,tf_Y:onehot_y_dev}) 

テンソルフローでソフトマックスクロスエントロピーを実装しようとしています。 私はsess.run(コスト)を返します。数値(2.322) を返しますが、GradientDescentOptimizerを実行したときに返されるコストは... ここには何が起こっていますか?オプティマイザ機能を間違って実装しましたか?テンソルフローグラジエントオプティマイザがNanを返し、クロスエントロピーコストが数値を返します。

答えて

0

O.K問題を自分で見つけました。 私は常に爆発的なグラデーションについて聞いたことがありますが、ここでの問題はコストの爆発です。

私の最初の勾配降下後、私の高い学習率は、-log(非常にゼロに近い数)になることによって、私のコストを爆発させました。 同じ問題がある場合は、学習率を下げるか、tf.clipを使用してこのタイプの問題を緩和してください。

関連する問題