2017-09-26 46 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