2017-02-03 16 views
0

CSVからのデータのロードをテストし、さまざまなサマリーとビジュアライゼーションをTensorBoardに追加するための非常に基本的なTensorFlowアプリケーションがあります。私の入力CSVファイルは18行と一列の列を持ちます。最初のXX列は「フィーチャー」で、その後のYY列はラベルを表す0と1です。TensorFlow CSVインポート:TensorBoard用の機能とラベルを追加すると、行の2倍が読み取られます

フィーチャとラベルを保持する変数のサマリを作成すると、TensorFlowはCSVの2倍の数の行を読み込むので、18行を18回繰り返してループするのではなく、9回ループします。 Feature and Labels to Summaryを追加するコードを削除すると、読み取り値は正常に戻ります。コストなどのサマリに他の変数を追加する。それはCSVではなく機能の出力であり、この問題はありません。

私はTensorBoardで実際にその情報が必要かどうかはまだ分かりませんので、私はそれなしで暮らすことができますが、まずTensorBoardにできるだけ多くの情報を入れてから、保つ。

これは予期した動作ですか、何か間違っていますか?

fileName = 'inputFile.csv' 
    logs_path = 'log_path' 
    try_epochs = 1 
    sampling_size = 3 
    TS = 479 
    TL = 6 

    rDefaults = [[0.02] for row in range((TS+TL))] 

    def read_from_csv(filename_queue): 
     reader = tf.TextLineReader(skip_header_lines=False) 
     _, csv_row = reader.read(filename_queue) 
     data = tf.decode_csv(csv_row, record_defaults=rDefaults) 
     features = tf.slice(data, [0], [TS]) 
     label = tf.slice(data, [TS], [TL]) 
     return features, label 

    def input_pipeline(batch_size, num_epochs=None): 
     filename_queue = tf.train.string_input_producer([fileName], num_epochs=num_epochs, shuffle=False) 
     example, label = read_from_csv(filename_queue) 
     example_batch, label_batch = tf.train.batch(
      [example, label], 
      batch_size=batch_size) 
     return example_batch, label_batch 

    x = tf.placeholder(tf.float32, [None, TS], name='pl_one') 
    W = tf.Variable(tf.random_normal([TS, TL], stddev=1), name='weights') 
    b = tf.Variable(tf.random_normal([TL], stddev=1), name='biaes') 
    y = tf.matmul(x, W) + b 
    y_ = tf.placeholder(tf.float32, [None, TL], name='pl_two') 

    examples, labels = input_pipeline(sampling_size, try_epochs) 

    # this one causes the issue 
    with tf.name_scope('Features'): 
     features = examples 
    # this one also causes the issue 
    with tf.name_scope('Labels'): 
     labDisp = labels  
    with tf.name_scope('Model'): 
     myModel = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y) 
    with tf.name_scope('Loss'): 
     lossFn = tf.reduce_mean(myModel) 
    with tf.name_scope('Optimizer'): 
     train_step = tf.train.AdamOptimizer(.05).minimize(lossFn) 

    a1 = tf.summary.histogram("Features", features) 
    a2 = tf.summary.histogram("Labels", labDisp) 
    a3 = tf.summary.histogram("Model", myModel) 
    a4 = tf.summary.scalar("Loss", lossFn) 

    merged_summary_op = tf.summary.merge([a1, a2, a3, a4]) 

    with tf.Session() as sess: 
     gInit = tf.global_variables_initializer().run() 
     lInit = tf.local_variables_initializer().run() 

     summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph()) 

     coord = tf.train.Coordinator() 
     threads = tf.train.start_queue_runners(coord=coord) 

     try: 
      while not coord.should_stop(): 
       example_batch, label_batch = sess.run([examples, labels]) 
       act = tf.argmax(label_batch, 1) 
       fit = tf.argmax(y, 1) 
       _, pAct, pFit, l, summary = sess.run([train_step, act, fit, lossFn, merged_summary_op], feed_dict={x: example_batch, y_: label_batch}) 
       summary_writer.add_summary(summary, i) 
       print(pAct) 
       print(pFit) 

     except tf.errors.OutOfRangeError: 
      print('Finished') 
     finally: 
      coord.request_stop() 
     coord.join(threads) 

ありがとう!

答えて

1

問題は、各session.runコールがキューからプルすることです(最初のセッションは明示的に実行され、2番目はサマリー・オプションがキュー・データに依存するため)。以前にプルされたデータをフィードするためにfeed_dictを使用するのではなく、同じsession.runコールでキューデータのサマリーと実際の使用があれば、データが破棄されることはありません。次のようなものがあります:

examples, labels = input_pipeline(sampling_size, try_epochs) 

x, y_ = examples, labels 

W = tf.Variable(tf.random_normal([TS, TL], stddev=1), name='weights') 
b = tf.Variable(tf.random_normal([TL], stddev=1), name='biaes') 
y = tf.matmul(x, W) + b 


# this one causes the issue 
with tf.name_scope('Features'): 
    features = examples 
# this one also causes the issue 
with tf.name_scope('Labels'): 
    labDisp = labels 
with tf.name_scope('Model'): 
    myModel = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y) 
with tf.name_scope('Loss'): 
    lossFn = tf.reduce_mean(myModel) 
with tf.name_scope('Optimizer'): 
    train_step = tf.train.AdamOptimizer(.05).minimize(lossFn) 

a1 = tf.summary.histogram("Features", features) 
a2 = tf.summary.histogram("Labels", labDisp) 
a3 = tf.summary.histogram("Model", myModel) 
a4 = tf.summary.scalar("Loss", lossFn) 

merged_summary_op = tf.summary.merge([a1, a2, a3, a4]) 

with tf.Session() as sess: 
    gInit = tf.global_variables_initializer().run() 
    lInit = tf.local_variables_initializer().run() 

    summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph()) 

    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 

    try: 
    while not coord.should_stop(): 
     act = tf.argmax(labels, 1) 
     fit = tf.argmax(y, 1) 
     _, pAct, pFit, l, summary = sess.run([train_step, act, fit, lossFn, 
              merged_summary_op]) 
     summary_writer.add_summary(summary, i) 
     print(pAct) 
     print(pFit) 

    except tf.errors.OutOfRangeError: 
    print('Finished') 
    finally: 
    coord.request_stop() 
    coord.join(threads) 
+0

あなたの説明は理にかなっていますが、どのように実際にプレースホルダにTFを提供するのか分かりません。あなたが示唆したようにコードを実行すると、「Xがプレースホルダであるため、dtype floatでプレースホルダテンソルの値を供給する必要があります。しかし、もちろん私がそれを摂取すれば、CSVファイルを2回読むことの正方形に戻ることができますか? –

+1

私はちょうどプレースホルダーを取り除くだろう。モデルはキューから直接操作できます。 –

関連する問題