Я изучаю TensorFlow "более низкий API", где вы вручную определяете слои с помощью tf.layers
, создаете наборы данных и итераторы, а также запускаете циклы для обучения и проверки модели.Я пытаюсь провести обучение и проверку.К сожалению, я сталкиваюсь с ошибками при попытке переключения между наборами данных обучения и проверки:
Вот что у меня есть:
self.train_it = \
train_dataset.batch(self.batch_size).make_initializable_iterator()
self.validate_it = \
train_dataset.batch(self.batch_size).make_initializable_iterator()
...
input_layer = self.train_it.get_next()[0]
hidden1 = tf.layers.dense(
input_layer,
... )
...
with tf.name_scope('train'):
self.train_op = \
tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(self.loss)
...
for epo in range(epochs):
# Train using self.train_it iterator.
self.sess.run(self.train_it.initializer)
total_loss = 0
for iteration in range(n_batches):
summary, _, batch_loss = self.sess.run([self.merged_summary, \
self.train_op, self.loss])
total_loss += batch_loss
print(' Epoch : {}/{}, Training loss = {:.4f}'. \
format(epo+1, epochs, total_loss / n_batches))
# Validate using self.valid_it iterator.
self.sess.run(self.validate_it.initializer)
# HOW DO I TELL THE MODEL TO USE self.valid_it INSTEAD OF self.train_it ???
Проблема в том, что в начале я уже говорил моделииспользовать train_it
: input_layer = self.train_it.get_next()[0]
, и теперь я должен сказать ему переключаться между train_it
и validate_it
каждую эпоху.Я должен что-то упустить в API о том, как это сделать.