質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.32%

TensorFlowを用いた手書き文字認識の結果を出力したい

解決済

回答 1

投稿

  • 評価
  • クリップ 3
  • VIEW 4,464
退会済みユーザー

退会済みユーザー

TensorFlowのバージョンは0.9.0です。

現在、TensorFlowを用いた学習の勉強をしています。チュートリアルとして手書き文字の認識をするプログラムを書いているのですが、学習モデルが予測した結果や、実際の値を出力する方法が分からず詰まっています。現在の状況としては、現在以下のようなコードで学習を行い、予測と実際の値を出力しようとしているのですが……

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

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

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

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])

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(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

# 予測と実際の値を出力したい
x_answer = tf.argmax(y, 1)
y_answer = tf.argmax(y_, 1)
print("x", sess.run(x_answer[0:10], feed_dict={x: [1,1,1,1,1,1,1,1,1,1]}))
print('y', sess.run(y_answer[0:10], feed_dict={x: [1,1,1,1,1,1,1,1,1,1]}))

# 正答率の出力
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

sess.close()


以下のようなエラーが出て失敗してしまいます。

Traceback (most recent call last):
  File "test1.py", line 29, in <module>
    print("x", sess.run(x_answer[0:10], feed_dict={x: [1,1,1,1,1,1,1,1,1,1]}))
  File "/home/numanicloud/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 372, in run
    run_metadata_ptr)
  File "/home/numanicloud/anaconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 625, in _run
    % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (10,) for Tensor 'Placeholder:0', which has shape '(?, 784)'

うまくいく方法をご存じの方がいらっしゃいましたら、教えていただけないでしょうか。よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

+2

グラフ内にふたつのplaceholderであるx, y_が含まれるため、sess.run()を呼び出す時に適当な値をfeedする必要があったみたいです。質問で投げたコードではよく分からずに

print("x", sess.run(x_answer[0:10], feed_dict={x: [1,1,1,1,1,1,1,1,1,1]}))

と、意味のない値をfeedしていましたが、ここはテストしたい画像データのベクトルとラベルのベクトルをfeedする必要があったみたいです。修正後は次のとおりです:

x_answer = tf.argmax(y, 1)
y_answer = tf.argmax(y_, 1)
print("x", sess.run(x_answer[0:30], feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
print('y', sess.run(y_answer[0:30], feed_dict={x: mnist.test.images, y_: mnist.test.labels})

mnist.test.images, mnist.test.labelsからテスト用データを取得できるみたいです。これで次のような結果が得られました:

x [7 2 1 0 4 1 4 9 6 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1]
y [7 2 1 0 4 1 4 9 5 9 0 6 9 0 1 5 9 7 3 4 9 6 6 5 4 0 7 4 0 1]
0.9167

一部不正解がありながらもおよそ一致していて、学習ができていることが確認できました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る