通常情况下,我们在训练的时候都想边训练边找来一批验证数据看看在验证数据上的性能。但是由于tensorflow中如果使用queue的方法来读取数据的话,这方法就不好实现了,主要问题是由于queue读取数据的时候,我们的graph的构建就不是使用placeholder的方法而是,那么在同一个session中就没办法换输入数据了。为了更好的描述这个问题,我先给出代码:
#使用queue方法得到的数据
train_images, train_label = get_batch_train_data(batch_size)
valid_images, valid_label = get_batch_valid_data(batch_size)
def build_graph(x, y):
#the first layer
w1 = tf......
b1 = tf.....
h1 = tf.nn.relu(tf.matmul(x,w1)+b)...
#the second layer
.....
#the xx layer
......
h = tf.nn.relu(..)
loss = .....
accuracy = ...
train_op = ....
return loss, accuracy, train_op
with tf.Session() as sess:
....
loss, accuracy, train_op = build_graph(train

在TensorFlow中使用queue读取数据时,如何在同一个session中进行训练与验证数据的交替操作是一个挑战。因为queue读取数据不使用placeholder,导致在同一session中无法简单切换数据源。常见的错误做法是创建新的graph并重新初始化变量,但这会丢失已训练的权重。解决方法是重新构建graph,包含根据条件选择训练或验证数据的分支。这样可以在不丢失权重的情况下,实现训练和验证的无缝切换。然而,这也会带来可视化summary的问题,需要对summary的处理方式进行调整。

1002

被折叠的 条评论
为什么被折叠?



