有。我想在训练过程中验证我的神经网络。 创建一个占位符来决定是否应将train_batch或test_batch馈入网络以实现验证。 这是我的示例代码。在 train.tfrecords 中,数字是0到100,而在 test.tfrecords 中,数字是200到240。
create_tfrecord(filename=r'test', begin_num=200, end_num=240)
filename = r'./train.tfrecords'
filename_que = tf.train.string_input_producer([filename],
num_epochs=1)
num = decode_tfrecord(filename_que)
testfilename = r'./test.tfrecords'
test_que = tf.train.string_input_producer([testfilename],
num_epochs=None)
test_num = decode_tfrecord(test_que)
is_training = tf.placeholder(dtype=tf.bool, shape=())
num = tf.cond(is_training, lambda:num, lambda:test_num)
coord = tf.train.Coordinator()
init_op = tf.local_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
threads = tf.train.start_queue_runners(coord=coord, sess=sess)
try:
i = 0
while not coord.should_stop():
feed_dict = {is_training: True}
number = sess.run(num, feed_dict=feed_dict)
print("global_step: %i, read_num: %i" %(i, number))
if i % 5 == 0 and i != 0:
feed_dict = {is_training: False}
number = sess.run(num, feed_dict=feed_dict)
print("global_step: %i, read_num: %i" %(i, number))
i += 1
except tf.errors.OutOfRangeError:
print("done.")
finally:
coord.request_stop()
coord.join(threads)
但是,输出与我想要的并不完全相同。 test_batch不是从200开始,它是 test.tfrecords 中的第一个数字,而不是从206开始。在那之后,train_batch从7开始而不是从6开始。这是一些输出。
global_step: 0, read_num: 0
global_step: 1, read_num: 1
global_step: 2, read_num: 2
global_step: 3, read_num: 3
global_step: 4, read_num: 4
global_step: 5, read_num: 5
global_step: 5, read_num: 206
global_step: 6, read_num: 7
global_step: 7, read_num: 8
global_step: 8, read_num: 9
global_step: 9, read_num: 10
global_step: 10, read_num: 11
global_step: 10, read_num: 212
这些输出的行为类似于存在一个用于训练和验证的计数器。将纪元设置为1后,并不是我的所有训练集都可以在训练阶段使用,并且命令我的test_batch被提取不是我想要的。我认为这种方法是在训练时实现验证的错误方法。
那么,有没有人可以告诉我在培训网络期间如何正确实施验证?
先谢谢了。