2017-09-26 7 views
0

Tensorflowを使用して畳み込みネットワークをトレーニングしようとしています。 畳み込みレイヤーへの入力は3つのChaneelカラーイメージで、出力(ラベル)はシングルチャンネル画像です。 私はtfrecordとキューを使用しています。デキューOPはデキューを1回のトレーニングバッチで2回呼びます。

image, labelImage = queue.dequeue_many(BATCH_SIZE) 

画像の下に与えられた最初の畳み込み層への入力として進み、labelImage損失を計算するために使用されます。上記のコードのために、次のように

conv1 = tf.layers.conv2d(inputs=img,filters=8,kernel_size=5,padding='SAME',activation=tf.nn.relu) 
..... 
..... 
finaldeconv = tf.layers.conv2d_transpose(inputs=deconv2,filters=1,kernel_size=5,strides=(2,2),padding='SAME',activation=tf.nn.relu) 
loss = tf.divide(tf.square(tf.subtract(labelImage,finaldeconv)),2) 
cost = tf.reduce_mean(loss) 

optimiser = tf.train.AdamOptimizer(LEARNING_RATE) 
train = optimiser.minimize(cost) 

だから、今、私はセッション内で訓練するとき

sess.run(train) 

OPコールする必要があります: -

鉄道opは損失OPを呼び出します。 損失OPが

dequeop画像

画像とlabelImage両方のコールを呼び出しCONV1 CONV1 を呼び出すfinaldeconv labeImageを呼び出し、finaldeconv 私はCONV層と損失を計算するためlabelImageに対応するための画像を取得いけません。 imageとLabelImageはdequeを別々に呼び出します。これをどうすれば解決できますか?

プレースホルダを使用してイメージとlabelImageをプレースホルダに配置する方法もありますが、GPUでコピーする際に時間を掛けたくありません。私はすでにgpuのキューを持っています。

答えて

0

画像と並列に

dequeop labelImage両方コールはい、dequeop同じ。

明示的imageまたはlabelImage(異なるsess.run呼び出しを使用して)呼び出していないので、あなたはimage & labelImageがペアで行くことを確認することができます。

あなたがtrain操作の単一sess.run呼び出しを使用している場合は、入力画像に対して正しくないラベルの値を取得しているしかし、問題はどこか別の場所である:多分あなたの連想イメージラベルが間違っていますか、 sess.run(op1)sess.run(op2)を呼び出しています。op1imageop2labelImageを使用しています。

このコンテキストでは、imageはイメージの「前の」値であり、imageLabelsは実際の(まだフェッチされていない)イメージに関連付けられたラベルです。

+0

まずはお返事ありがとうございます。私はあなたの答えを正しく理解したことを確認したいと思います。 queue = tf.RandomShuffleQueue(capacity = 100、min_after_dequeue = 2、dtypes = 2、dtypes = 1)このキューに挿入されるトレーニング例は、リスト形式のex- [image、labelImage]です。 (IMAGE_ROWS、IMAGE_COLS、3)、(IMAGE_ROWS、IMAGE_COLS)]) これで、sess.run(train)を呼び出すだけで、dequeue opを一度だけ呼び出すか繰り返しごとに? もしそうなら、imageとlabelImageはペアであり、私の問題は解決されます。 –

+0

はい、正しく理解しました – nessuno

関連する問題