对于单个训练批次,出队被称为两次

时间:2017-09-26 10:23:35

标签: tensorflow tensorflow-gpu

我正在尝试使用Tensorflow训练卷积网络。 卷积层的输入是3个Chaneel彩色图像,输出(Label)是单通道图像。 我正在使用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)

以上代码的op调用应如下所示: -

训练操作电话丢失操作。 丢失操作调用labeImage和finaldeconv finaldeconv调用conv1 conv1调用图像

image和labelImage都调用dequeop

我没有得到转换图层的图像和相应的labelImage来计算损失。 image和LabelImage对deque进行单独调用。我该如何解决这个问题?

一种方法是使用占位符并将图像和labelImage放置到占位符,但我不想在gpu中复制时间。我已经在gpu上有队列了。

1 个答案:

答案 0 :(得分:0)

  

image和labelImage都调用dequeop

是的,相同 dequeop并行。

由于您未明确呼叫(使用不同的sess.run来电)imagelabelImage,因此您可以确定image& labelImage成对出现。

如果您使用sess.run操作的单train次调用,则会获得对输入图像不正确的标签值,问题是其他地方:也许您的关联图片标签错误,或者您正在调用sess.run(op1)sess.run(op2) op1使用imageop2使用labelImage }。

在此上下文中,image是图像的“上一个”值,imageLabels是与实际(尚未提取)图像相关联的标签。