2016-06-20 10 views
0

Tensorflowを初めて使用しました。私はMNIST(https://www.tensorflow.org/versions/r0.9/tutorials/mnist/beginners/index.html)に関する初心者のチュートリアルに進みました。 与えられたデータでうまく動作しますが、自分自身を使用しようとすると失敗します。 - は、ここで私は、ネットワークがさらに(i、j)を学ぶ作るしようとしている実装の一例です>(私はJ +):結果初心者のチュートリアルでカスタムデータを使用できません

def generateData(n, r=100) : 
    inputData = [] 
    outputData = [] 
    for k in range(n): 
     i, j = random.randrange(0, r), random.randrange(0, r) 
     inputData.append([i, j]) 
     outputData.append([i + j]) 
    return inputData, outputData 

x = tf.placeholder(tf.float32, [None, 2]) 
W = tf.Variable(tf.zeros([2, 1])) 
b = tf.Variable(tf.zeros([1])) 
y = tf.nn.softmax(tf.matmul(x, W) + b) 
y_ = tf.placeholder(tf.float32, [None, 1]) 
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 
init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init) 
for i in range(10): 
    batch_xs, batch_ys = generateData(10) 
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) 
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 
batch_xs, batch_ys = generateData(10) 
print(sess.run(accuracy, feed_dict={x: batch_xs, y_: batch_ys})) 
feed_dict = {x: batch_xs} 
classification = sess.run(y, feed_dict) 
print(classification) 

を、私は正確さのために1.0とベクトルの取得します分類のための[1.0]。モデルは本当にシンプルなので100%の精度が可能ですが、予測は明確ではありません。実際には、生成された出力データi + jを乱数で置き換えると、全く同じ結果が得られます。このような場合、1.0の正確さを持つことはできません。 ネットワークが何も学んでいないかのようです。 どこに問題がありますか?

答えて

1

実際には線形回帰を試みていますが、分類*に合わせたクロスエントロピー損失を使用しています。別の損失関数を使用してみてください。 squared_loss = tf.reduce_mean(tf.squared_distance(y, y_))

*また、間違った方法でクロスエントロピー損失を使用しています。クロスエントロピー損失を伴う分類を行う場合、分類問題のクラスごとに1つの出力ニューロンを持つ必要があります。上のコードスニペットでは、出力ニューロン(yの形状は[None, 1])ですが、yが0から100までの2つの整数の合計である場合は200の仮説クラスです。この特定の問題はは分類の問題として扱われません。私が提供したコードでこのエラーを指摘したかっただけです。

関連する問題