2017-04-07 17 views
1

私は機械学習とTensorflowの初心者ですが、サンプルチュートリアルのソースコードを使用してモデルを習得し、精度を印刷しましたが、モデルをエクスポートするソースコードは含まれていません新しい画像を予測するための変数とインポート。修復されたトレーニングモデルのTensorflowレポートエラー

私はモデルをエクスポートするためのソースコードを改訂し、テストデータセットを使用して予測する新しいPythonスクリプトを作成しました。ここで

がトレーニングモデルエクスポートするためのソースコードです:新しいPythonスクリプトで

mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) 
print("run here3") 
# Create the model 
x = tf.placeholder(tf.float32, [None, 784], name="x") 
W = tf.Variable(tf.zeros([784, 10]), name="W") 
b = tf.Variable(tf.zeros([10])) 
y = tf.matmul(x, W) + b 
saver = tf.train.Saver() 
sess = tf.InteractiveSession() 
... ignore the source code for the cost function definition and train the model 
#after the model get trained, save the variables and y 
tf.add_to_collection('W', W) 
tf.add_to_collection('b', b) 
tf.add_to_collection('y', y) 

saver.save(sess, 'result') 

を、私は、モデル、再度実行yの機能

sess = tf.Session() 
saver = tf.train.import_meta_graph('result.meta') 
saver.restore(sess, tf.train.latest_checkpoint('./')) 
W = tf.get_collection('W')[0] 
b = tf.get_collection('b')[0] 
y = tf.get_collection('y')[0] 


mnist = input_data.read_data_sets('/tmp/tensorflow/mnist/input_data', one_hot=True) 
img = mnist.test.images[0] 
x = tf.placeholder(tf.float32, [None, 784]) 
sess.run(y, feed_dict={x: mnist.test.images}) 

すべての作品を復元しよう正しく、私はそれらを印刷する場合、Wとbの値を得ることができますが、私は最後の文(実行y関数)を実行中にエラーが発生します。それが動作しない理由を

Caused by op u'x', defined at: 
File "predict.py", line 58, in <module> 
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) 
File "/Users/zhouqi/git/machine-learning/tensorflow/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 44, in run 
_sys.exit(main(_sys.argv[:1] + flags_passthrough)) 
File "predict.py", line 25, in main 
saver = tf.train.import_meta_graph('result.meta') 
File "/Users/zhouqi/git/machine-learning/tensorflow/lib/python2.7/site- packages/tensorflow/python/training/saver.py", line 1566, in import_meta_graph 
**kwargs) 
File "/Users/zhouqi/git/machine-learning/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/meta_graph.py", line 498, in import_scoped_meta_graph 
producer_op_list=producer_op_list) 
File "/Users/zhouqi/git/machine-learning/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/importer.py", line 288, in import_graph_def 
op_def=op_def) 
File "/Users/zhouqi/git/machine-learning/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2327, in create_op 
original_op=self._default_original_op, op_def=op_def) 
File "/Users/zhouqi/git/machine-learning/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1226, in __init__ 
self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'x' with dtype float 
[[Node: x = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

それは私がXを定義するために同じ文を使用して、とyの関数の実行中に同じアプローチを使用して、Xフィードん奇妙な原因だ、私は知らないのですか?

+0

mnist = input_data.read_data_sets( '/ tmp/tensorflow/mnist/input_data'、one_hot = True)で 'mnist = input_data.read_data_sets(FLAGS.data_dir、one_hot = True)'という行を置き換えたのはなぜですか? ? – tagoma

+0

ああ、モデルを復元するために作成した新しいスクリプトでは、ハードコードされたデータフォルダを使用するように単純化しています.FLAGS.data_dirは/ tmp/tensorflow/mnist/input_dataと同じです。 – mailme365

答えて

1

問題は、新しいプレースホルダです:同じ名前のプレースホルダを作成

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

は十分ではありません。実際には、モデルの作成時に使用したのと同じプレースホルダが必要です。したがって、あなたはまた、最初のファイルでコレクションにXを追加する必要があります。

tf.add_to_collection('x', x) 

と新しいファイルでそれをロードします。

x = tf.get_collection('x')[0] 

代わりに新しいものを作成します。

関連する問題