我想用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上有队列了。
首先感谢您的回复。我想确认我正确理解您的答案。 插入到队列中的一个训练示例采用列表格式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是成对的,我的问题将得到解决。 –
是的,你理解正确 – nessuno