Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow:使用监控培训课程时验证模型_Python_Tensorflow_Deep Learning - Fatal编程技术网

Python TensorFlow:使用监控培训课程时验证模型

Python TensorFlow:使用监控培训课程时验证模型,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我正在使用dataset API导入培训和验证数据。我有TF1.2。所以我只能使用可重新初始化的迭代器,而不能使用可反馈迭代器,因为可反馈迭代器仅在TF1.4中可用 1) 如果我们只想训练网络,我们可以简单地使用监控训练课程。但是,当我们想在训练中验证时,我们应该如何做呢?我们是否应该放弃受监控的培训课程,使用低级别课程 train_dataset = tf.contrib.data.TFRecordDataset([FLAGS.data_dir + "train.tfrecords"]) tr

我正在使用dataset API导入培训和验证数据。我有TF1.2。所以我只能使用可重新初始化的迭代器,而不能使用可反馈迭代器,因为可反馈迭代器仅在TF1.4中可用

1) 如果我们只想训练网络,我们可以简单地使用监控训练课程。但是,当我们想在训练中验证时,我们应该如何做呢?我们是否应该放弃受监控的培训课程,使用低级别课程

train_dataset = tf.contrib.data.TFRecordDataset([FLAGS.data_dir + "train.tfrecords"])
train_dataset = train_dataset.map(_parse_records)
train_dataset.shuffle(buffer_size=1000)
train_dataset = train_dataset.repeat()
train_dataset = train_dataset.batch(FLAGS.batch_size)

validation_dataset = tf.contrib.data.TFRecordDataset([FLAGS.data_dir + "test.tfrecords"])
validation_dataset = test_dataset.map(_parse_records)
validation_dataset = test_dataset.batch(FLAGS.batch_size)

iterator = tf.contrib.data.Iterator.from_structure(train_dataset.output_types, train_dataset.output_shapes)

train_init_op = iterator.make_initializer(train_dataset)
validation_init_op = iterator.make_initializer(validation_dataset)

next_example, next_label = iterator.get_next()
loss = model_function(next_example, next_label)

training_op = tf.train.AdagradOptimizer(...).minimize(loss)

with tf.train.MonitoredTrainingSession(...) as sess:
    sess.run(train_init_op)
    while not sess.should_stop():
        sess.run(training_op)

   # HOW TO VALIDATE?
< P > 2)有没有一种方法可以使用可再初始化迭代器在一个时期中验证模型,因为当我们在迭代器之间切换时,它需要从数据集的开始初始化迭代器。使用可重新初始化迭代器是否可能,或者我们必须切换到可反馈迭代器才能做到这一点

这是TF数据集教程中提供的示例。这里,如果一个历元中可能有100次迭代,我们可以使用可重新初始化的迭代器在迭代50处验证模型吗?(我认为使用feedable迭代器是可能的)

3) 在使用可重新初始化迭代器时,在历元的最后一次迭代中,如果剩余的训练数据样本小于所需的批量大小,会发生什么情况?
剩下的几个样本是用于减少批量还是被忽略了?

对于你的问题3,我认为TensorFlow表现不佳。对于最后一批,其样品数量可能较少。这通常(总是?)会在培训期间导致“不兼容形状”错误。请查看如何解决TensorFlow 1.4中的问题。对于问题3,我认为TensorFlow表现不佳。对于最后一批,其样品数量可能较少。这通常(总是?)会在培训期间导致“不兼容形状”错误。请查看如何解决TensorFlow 1.4版的问题请查看 我想你会找到1)和2)的答案。 您可以使用提要来更改要评估的数据集,或者只是重新初始化它。从链接:

...
training_iterator = training_ds.make_initializable_iterator()
validation_iterator = validation_ds.make_initializable_iterator()
...
sess.run(next_element, feed_dict={handle: training_handle})
...
sess.run(next_element, feed_dict={handle: validation_iterator })
请看一看 我想你会找到1)和2)的答案。 您可以使用提要来更改要评估的数据集,或者只是重新初始化它。从链接:

...
training_iterator = training_ds.make_initializable_iterator()
validation_iterator = validation_ds.make_initializable_iterator()
...
sess.run(next_element, feed_dict={handle: training_handle})
...
sess.run(next_element, feed_dict={handle: validation_iterator })

对于你的问题3,我感到困惑。tensorflow似乎试图使用较少的样本数运行。然而,我后来得到一个“不兼容的形状”错误。这可能取决于你的模型(我可能不正确)。对于你的问题3,我感到困惑。tensorflow似乎试图使用较少的样本数运行。然而,我后来得到一个“不兼容的形状”错误。这可能取决于您的模型(我可能不正确)。欢迎提供指向解决方案的链接,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及为什么存在,然后引用您链接到的页面的最相关部分,以防目标页面不可用。欢迎链接到某个解决方案,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及为什么存在,然后引用您链接到的页面的最相关部分,以防目标页面不可用。