2017-07-01 21 views
1

私は.csvデータセット(5008列、533行)でモデルをトレーニングしようとしています。 私は[ラベル] 2個のテンソル、[例]と、正しいラベルを保持している1に訓練するためにデータを保持する1にデータを解析したTextReaderを使用しています:何かを実行するときTensorflow:トレーニングの辞書として入力パイプライン(.csv)を使用

def read_my_file_format(filename_queue): 
    reader = tf.TextLineReader() 
    key, record_string = reader.read(filename_queue) 
    record_defaults = [[0.5] for row in range(5008)] 

    #Left out most of the columns for obvious reasons 
    col1, col2, col3, ..., col5008 = tf.decode_csv(record_string, record_defaults=record_defaults) 
    example = tf.stack([col1, col2, col3, ..., col5007]) 
    label = col5008 
    return example, label 

def input_pipeline(filenames, batch_size, num_epochs=None): 
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=True) 
    example, label = read_my_file_format(filename_queue) 
    min_after_dequeue = 10000 
    capacity = min_after_dequeue + 3 * batch_size 
    example_batch, label_batch = tf.train.shuffle_batch([example, label], batch_size=batch_size, capacity=capacity, min_after_dequeue=min_after_dequeue) 
    return example_batch, label_batch 

この部分は、働いています以下のような:

with tf.Session() as sess: 
    ex_b, l_b = input_pipeline(["Tensorflow_vectors.csv"], 10, 1) 
    print("Test: ",ex_b) 

私の結果はこれまでのところ、これは私には罰金だTest: Tensor("shuffle_batch:0", shape=(10, 5007), dtype=float32)

です。次に、2つの隠れたレイヤー(それぞれ512ノードと256ノード)を考慮した単純なモデルを作成しました。私はthis example that uses the MNIST databaseにこのアプローチをベースとしました

batch_x, batch_y = input_pipeline(["Tensorflow_vectors.csv"], batch_size) 
_, cost = sess.run([optimizer, cost], feed_dict={x: batch_x.eval(), y: batch_y.eval()}) 

:私はモデルを訓練しようとしていたときにどこに物事がうまくいかないことです。 しかし、私がこれを実行しているときに、私がちょうどbatch_size = 1を使用していても、Tensorflowはちょうどハングします。私はテンソルから実際のデータを取得する必要があります.eval()機能を省略した場合、私は次の応答を取得:

TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, or numpy ndarrays. 

さて、これは私が理解することができますが、プログラムは私が含まれないときハングなぜ私は理解していません.eval()機能と私はこの問題についての情報をどこで見つけることができるかわかりません。

編集:私はスクリプト全体の最新版を含めましたhere。プログラムは、まだ私はビジェイmの誤差が言うように

+0

コード全体を追加してください。 –

+0

全体のコードはここにあります:[link](https://github.com/Voidling0/TFCSV2/blob/master/script.py) – Voidling

答えて

0

により提供されたソリューションを(私が正しく知っている限り)、あなたはfeed_dictにテンソルを供給しようとしている実装にもかかわらず、ハングアップします。 input_pipelineキューを定義していて、それをfeed_dictとして渡すことはできません。モデルと列車にデータを渡す適切な方法は、次のコードに示されています。

# A queue which will return batches of inputs 
batch_x, batch_y = input_pipeline(["Tensorflow_vectors.csv"], batch_size) 

# Feed it to your neural network model: 
# Every time this is called, it will pull data from the queue. 
logits = neural_network(batch_x, batch_y, ...) 

# Define cost and optimizer 
cost = ... 
optimizer = ... 

# Evaluate the graph on a session: 
with tf.Session() as sess: 
    init_op = ... 
    sess.run(init_op) 

    # Start the queues 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(sess=sess, coord=coord) 

    # Loop through data and train 
    for (loop through steps): 
     _, cost = sess.run([optimizer, cost]) 

    coord.request_stop() 
    coord.join(threads) 
+0

私はあなたに助けてくれてありがとう!私のベクトルの次元が等しくないために必要な変更を追加した後(私はreshape関数 'batch_y = tf.reshape(batch_y、[12、1])'を使って解決しました)、私はまだ迷っていますプログラムがもう一度ハングアップするからです。あなたが見てみたいと思うなら私のコード全体へのリンクがあります:[link](https://github.com/Voidling0/TFCSV2/blob/master/scriptv2.py)。プログラムがなぜ掛かっているのかを判断するのが非常に難しいため、Tensorflowに入ろうとしている他の人にとっても役立つことが分かりました。 – Voidling

+0

注:正確にするには** ** ** **行の後にハングアップします。途中で980Tiで動作するので、ハードウェアがこの問題の原因ではないと思っています。 – Voidling

+0

入力 'csv'も共有できますか? –

関連する問題