Модели тонкой настройки в тензорном потоке

Я тренирую модель в тензорном потоке с набором данных fer+. Fer + разделен на разделы обучения, проверки и тестирования. После обучения моей модели, я хотел создать новый классификатор и снова обучить всю модель на другом наборе данных. Поэтому я построил модель следующим образом:

def model(inputs, return_top=True):
    #.... Here I have several conv layers

    if return_top:
        output = tf.layers.dense(output, units=8, name='outputs')

    return output

with tf.variable_scope('model'):
    output_train = model(inputs_train)
    mse_train = cal_loss(output_train, labels_train) # This is a function that calculates the loss
    train_step = optimize(mse_train)    # This is a function that implements the optimizer

with tf.variable_scope('model', reuse=True):
    output_validation = model(inputs_validation)
    mse_validation = cal_loss(output_validation, labels_validation)

with tf.variable_scope('model', reuse=True):
    output_test = model(inputs_test)
    mse_test = cal_loss(output_test, labels_test)

# Now I defined the rest of the model to be used later in fine tuning. 
with tf.variable_scope('model', reuse=True):
    output_sewa_train = model(sewa_inputs_train, return_top=False)

output_sewa_train = tf.layers.dense(output_sewa_train, units=2, name='output_sewa_train')
mse_sewa_train = cal_loss(output_sewa_train, sewa_labels_train)
sewa_train_step = optimizer_2(mse_sewa_train)

with tf.variable_scope('model', reuse=True):
    output_sewa_valid = model(sewa_inputs_valid, return_top=False)

output_sewa_valid = tf.layers.dense(output_sewa_valid, units=2, name='output_sewa_valid')

Теперь для тренировки модели у меня есть:

fine_tune_model = False

if not fine_tune_model:
    sess.run(train_step) # etc... To train the model
else:
    sess.run(sewa_train_step) # etc... to finetune the model...

Ниже приведены изображения для моей модели:

Обратите внимание, что я сохранил данные в tfrecords, и я использовал tf.data.Dataset...

Теперь вот проблема:

когда fine_tune_model = FalseМодель успешно запущена. И когда fine_tune_model = True это сломало, давая мне эту ошибку:

FailedPreconditionError (see above for traceback): GetNext() failed because the iterator has not been initialized. Ensure that you have run the initializer operation for this iterator before getting the next element.
 [[Node: train_dataset/train_data = IteratorGetNext[output_shapes=[[?,64,64], [?,8]], output_types=[DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](train_dataset/Iterator)]]
 [[Node: model_2/d_block_2/bottleneck_5/dropout_1/cond/dropout/Shape-0-0-VecPermuteNCHWToNHWC-LayoutOptimizer/_4621 = _HostRecv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_17286...tOptimizer", tensor_type=DT_INT32, _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]

Также при просмотре, какие части модели связаны друг с другом, я получил следующее:

А также:

Что делает меня уверенным, что вывод модели, связанной с sewa, не зависит от набора данных fer+.

Кроме того, мы видим, что у нас всего 5 моделей. Основным является имена model, он принимает в качестве входных данных набор данных fer+ training; вторая модель model_1 какие ссылки modelи принимает в качестве входного набора данных fer+ validation. В-третьих, у нас есть model_2 какие ссылки model а также принимает тестовый набор данных модели fer+. Тогда у нас есть model_3 который берет набор данных sewa_train и, наконец, model_4 который принимает набор данных проверки sewa.

Кроме того, если я попытаюсь запустить output_sewa_train или же mse_sewa_trainкод выполняется успешно, но когда я запускаю оптимизатор, я получаю сообщение об ошибке.

Также обратите внимание, что я использовал tf.data.Dataset для подачи данных в модель вместо заполнителя, и это усложняет ситуацию.

В заключение я не уверен, как решить ошибку выше. Любая помощь высоко ценится!!

0 ответов

Другие вопросы по тегам