我正在尝试使用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上有队列了。
答案 0 :(得分:0)
image和labelImage都调用dequeop
是的,相同 dequeop
并行。
由于您未明确呼叫(使用不同的sess.run
来电)image
或labelImage
,因此您可以确定image
& labelImage
成对出现。
如果您使用sess.run
操作但的单train
次调用,则会获得对输入图像不正确的标签值,问题是其他地方:也许您的关联图片标签错误,或者您正在调用sess.run(op1)
和sess.run(op2)
op1
使用image
而op2
使用labelImage
}。
在此上下文中,image
是图像的“上一个”值,imageLabels
是与实际(尚未提取)图像相关联的标签。