2017-05-20 15 views
3

エポック制限を持つtf.train.string_input_producerを使用して、モデルにデータを入力しています。トレーニング中にこのオペレーションの現在のエポックを取得するにはどうすればよいですか?入力パイプラインから現在のエポックを取得する

このオペレーションに関連するグラフのノードがいくつかありますが、そのうちの1つにエポックの制限が含まれていますが、実際の現在の値がどこに格納されているのかわかりません。確かにこれはどこかで追跡されていますか?

さらに一般的に、TFRecordsパイプラインで現在のエポックをどのように監視できますか?

答えて

2

TFのどこにいても見つかりませんでした。

私の解決策は、(無限の)繰り返しでバッチ処理を行い、必要なだけ頻繁にノードを呼び出すことでした(データセット内の項目数を計算して事前に決定し、バッチサイズ= 1つのエポック)。

これはtensorflow.contrib.data.TFRecordDatasetを使用してTFの最近のリリースでは容易になった。

d = TFRecordDataset('some_filename.tfrecords') 
d = d.map(function_which_parses_your_protobuf_format) 
d = d.repeat() 
d = d.shuffle() 
d = d.batch(batch_size) 

あなたはそれがより多くの仕事のように思えるが、それは提供

record_count = sum([1 for r in tf.python_io.tf_record_iteration('your_filename.tfrecord')]) 

を使用して、データセットのサイズを決定することができますたとえば、キャッシングを使用できるため、柔軟性が向上しているため、事前にデータセットを前処理する必要がなく、オリジナルの変更されていないデータセットをtfrecordファイルに保存できます。

関連する問題