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のキューを持っています。
まずはお返事ありがとうございます。私はあなたの答えを正しく理解したことを確認したいと思います。 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はペアであり、私の問題は解決されます。 –
はい、正しく理解しました – nessuno