2017-09-26 74 views
0

我想用Tensorflow來訓練一個卷積網絡。 卷積層的輸入是3 Chaneel彩色圖像和輸出(標籤)是單通道圖像。 我正在使用tfrecord和隊列。下面出隊被稱爲單次訓練批次的兩次

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) 

運算調用應該是上面的代碼如下: -

火車運稱損失運算。 損失運算要求labeImage和finaldeconv finaldeconv調用CONV1 CONV1調用圖像

圖像和labelImage兩個呼叫dequeop

我沒有得到CONV層圖像和相應的labelImage計算損失。圖像和LabelImage分別調用deque。我怎樣才能解決這個問題?

一種方法是使用佔位符,並將圖像和labelImage放置到佔位符,但我不想腰部時間複製gpu。我已經在GPU上有隊列了。

回答

0

圖像和labelImage兩個呼叫dequeop

是的,相同dequeop,並聯。

既然你不顯式調用(使用不同sess.run電話)imagelabelImage,你可以肯定的是image & labelImage去對。

如果您使用的是單sess.run調用train操作你得到不輸入圖像正確標籤值,問題是其他地方:也許你的公會形象標籤是錯誤的或你打電話sess.run(op1)sess.run(op2)其中op1使用imageop2使用labelImage

在這種情況下,image是圖像的「先前」值,而imageLabels是與實際(並且尚未獲取)圖像關聯的標籤。

+0

首先感謝您的回覆。我想確認我正確理解您的答案。 插入到隊列中的一個訓練示例採用列表格式ex- [image,labelImage]。我有如下創建隊列: - queue = tf.RandomShuffleQueue(capacity = 100,min_after_dequeue = 2,dtypes = [ tf.float32,tf.float32],shapes = [(IMAGE_ROWS,IMAGE_COLS,3),(IMAGE_ROWS,IMAGE_COLS)]) 現在,如果我只是調用sess.run(train),它會只調用一次出隊操作每次迭代? 如果是這樣,image和labelImage是成對的,我的問題將得到解決。 –

+0

是的,你理解正確 – nessuno