2017-05-04 3 views
0

Tensorでは、私は変数の値を理解していません。以下は私のコードは、私がTensorflow:セッション実行後の変数値について

sess.run() 

を行った後Wの値が計算されるべきだと思います、しかし、プリントした後、私はそれは変化しなかった見つけます。

コードはTensorFlowウェブサイトのMNISTサンプルコードです。誰でも理由を説明できますWは変わりませんか?

from tensorflow.examples.tutorials.mnist import input_data 
import tensorflow as tf 

mnist = input_data.read_data_sets("MNIST_dat/",one_hot=True) 

x= tf.placeholder(tf.float32,[None,784])#need input x 

W= tf.Variable(tf.zeros([784,10])) 

b= tf.Variable(tf.zeros([10])) 

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


y_= tf.placeholder(tf.float32,[None,10])#need input y 

cross_entropy = tf.reduce_mean(-tf.reduce_mean(y_*tf.log(y),reduction_indices=[1])) 

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 

init = tf.global_variables_initializer() 

sess = tf.Session() 

sess.run(init) 

for i in range(1000): 
    batch_xs,batch_ys = mnist.train.next_batch(100) 
    sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys}) 

ww=W.eval(sess) 
print(ww) 

答えて

2

OK、私はあなたのコードを実行したとき、私はこの

 
[[ 0. 0. 0. ..., 0. 0. 0.] 
[ 0. 0. 0. ..., 0. 0. 0.] 
[ 0. 0. 0. ..., 0. 0. 0.] 
..., 
[ 0. 0. 0. ..., 0. 0. 0.] 
[ 0. 0. 0. ..., 0. 0. 0.] 
[ 0. 0. 0. ..., 0. 0. 0.]] 

のようなルックスを取得しかし、あなたは、Wが100個の要素によって784であることを、理解しなければならない出力は、この表示は、あなただけを示しますその開始時と終了時には値がほとんどありません。そして、MNISTのほとんどの画像では、最初と最後の数ピクセルは重要ではありません(実際の重要なデータは実際の数字が描かれている中央のどこかにあります)。私は

 
print(ww.min(), ww.max()) 

にprint文を変更した場合しかし、私は予想通り、いくつかの重みは、訓練されていることを意味し、この出力

-0.330358 0.429428

を取得します。

+0

実際にはWが変更されています。お気軽に – user3239558

+0

minとmaxを印刷することは実際にはあまり意味がありませんが、Wの絶対値の合計を印刷すると、元のゼロからどのくらい離れていますか?楽しくて、機械学習は最高です。 –

関連する問題