Я выполняю тонкую настройку модели Inception с помощью тензорного потока с помощью приведенной ниже настройки и загружаю партии tf.Dataset
API.Однако каждый раз, когда я пытаюсь обучить эту модель (перед успешным получением каких-либо пакетов), я получаю OutOfRangeError, утверждающую, что итератор исчерпан:
Caught OutOfRangeError. Stopping Training. End of sequence
[[node IteratorGetNext (defined at <ipython-input-8-c768436e70d8>:13) = IteratorGetNext[output_shapes=[[?,224,224,3], [?,1]], output_types=[DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](OneShotIterator)]]
with tf.Graph().as_default():
Я создал функцию для подачи в жестко запрограммированные партии в качестверезультат get_batch
, и он работает и сходится без каких-либо проблем, что наводит меня на мысль, что график и код сеанса работает правильно.Я также протестировал функцию get_batch
для итерации в сеансе, и это не вызывает ошибок.Я ожидаю, что при возобновлении обучения (особенно при перезагрузке ноутбука и т. Д.) Будет создан новый итератор для набора данных.
Код для модели поезда:
with tf.Graph().as_default():
tf.logging.set_verbosity(tf.logging.INFO)
images, labels = get_batch(filenames=tf_train_record_path+train_file)
# Create the model, use the default arg scope to configure the batch norm parameters.
with slim.arg_scope(inception.inception_v1_arg_scope()):
logits, ax = inception.inception_v1(images, num_classes=1, is_training=True)
# Specify the loss function:
tf.losses.mean_squared_error(labels,logits)
total_loss = tf.losses.get_total_loss()
tf.summary.scalar('losses/Total_Loss', total_loss)
# Specify the optimizer and create the train op:
optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
train_op = slim.learning.create_train_op(total_loss, optimizer)
# Run the training:
final_loss = slim.learning.train(
train_op,
logdir=train_dir,
init_fn=get_init_fn(),
number_of_steps=1)
Код для получения партий с использованием набора данных
def get_batch(filenames):
dataset = tf.data.TFRecordDataset(filenames=filenames)
dataset = dataset.map(parse)
dataset = dataset.batch(2)
iterator = dataset.make_one_shot_iterator()
data_X, data_y = iterator.get_next()
return data_X, data_y
Этот ранее заданный вопрос напоминает проблему, с которой я сталкиваюсь, однако я не использую batch_join
вызов.Я не, если это проблема с slim.learning.train, восстановление с контрольной точки или области.Любая помощь будет оценена!