2016-10-18 9 views
2

私はTensorFlowを初めて使用しており、データの読み込みの仕組みについて少し戸惑っています。私はmnistデータのTensorFlowグラフを設定しましたが、モデルを保存し、グラフをロードし、予測を行い、テストの精度を計算するために別のプログラムを実行するために、 。ファイルを訓練したTensorFlowグラフに個々の例を与えるか?

トレーニンググラフの元のI/Oシステムをバイパスし、精度テストのためにテストデータの予測または画像(ラベル)タプルに画像を「注入」する方法が混乱しています。トレーニングデータを読み取るには、私はこのコードを使用しています:

_, input_data = util.read_examples(
    paths_to_files, 
    batch_size, 
    shuffle=shuffle, 
    num_epochs=None) 

feature_map = { 
    'label': tf.FixedLenFeature(
    shape=[], dtype=tf.int64, default_value=[-1]), 
    'image': tf.FixedLenFeature(
    shape=[NUM_PIXELS * NUM_PIXELS], dtype=tf.int64), 
} 
example = tf.parse_example(input_data, features=feature_map) 

私はその後など、コンボリューション層に例を供給し、出力を生成します。

入力を指定してグラフをトレーニングし、グラフと重みを保存してからグラフと重みを別のスクリプトで復元して予測すると想像してください - 私は10枚の画像それらをグラフに供給して予測を生成します。どのようにして、予測を他端から出すように、これらの10個の画像を「注入」するのですか?

私はフィード辞書とプレースホルダーで遊んでいましたが、私はそれらが正しいものであるかどうかは分かりません。メモリからデータを読み取るのではなく、メモリにデータを置くことに頼っているようです例えば、テストデータのキュー。

ありがとうございます!

答えて

0

プレースホルダを使用したフィード辞書は、少数の推論/評価(つまりメモリに収まるのに十分)を実行する場合に意味があります。シンプルなモデルを提供していたり​​、小さなevalループを実行していた場合などです。

大きなバッチを推測したり評価したりする場合は、学習に使用したのと同じアプローチを使用して、テスト/評価/ライブデータとは異なるパスを使用する必要があります。例えば

これは通常のpython変数として使用でき、これを指定された変数として使用するための連続した依存する手順を設定できます。例えば

def get_example(data): 
    return tf.parse_example(data, features=feature_map) 

sess.run([get_example(path_to_your_data)]) 
+0

ok ok、それは意味があります。私の頭をラップするのに困っているのは、私のグラフをロードするときの動作です。オリジナルのutil.read_examplesノードはどこかのグラフにあり、私は何とかバイパスまたは変更しなければなりません。グラフを再配置してそれを削除し、新しい給餌ノードを追加するのが最も簡単な方法ですか? – user358829

+0

ああ - 推論と訓練のためにわずかに異なるグラフを作成するのが一般的ですが、最も簡単な解決策は推論時に同じグラフを使用することですが、フィード推論を行うことです。あなたはdictのキーとして置き換えたいテンソルとそのテンソルの値を値として渡すことができます。あなたの例では 'sess.run([your_inference_tensors]、{example ['image']:your_image_data})'を使うことができます。より明確にするために、[Session.run()](https://www.tensorflow.org/versions/r0.11/api_docs/python/client.html#Session.run)ドキュメントを確認してください。 –

関連する問題