Почему сводка по тестовой модели должна подавать данные в модель поезда?
Я строю модель LSTM для обучения с кратким изложением моей потери. Также я создаю тестовую модель с помощью tf.variable_scope('model', reuse = True).
with tf.variable_scope('model', reuse=None):
training_model = MyModel(...., feedforward_only = False)
with tf.variable_scope('model', reuse = True):
test_model = MyModel(...., feedforward_only = True)
Теперь я хотел бы просмотреть свои потери на тестовой модели, поэтому в моей функции step() я добавляю self.merged в свой список вывода:
if not forward_only:
output_feed = [self.update,
self.gradient_norm,
self.loss,
self.outputs,
self.merged]
else:
output_feed = [self.loss,
self.outputs,
self.merged]
Когда я передаю данные в тренировочную модель, я успешно получаю объединенную сводку и просматриваю потери на тензорной доске.
Но когда я пытаюсь передать данные в тестовую модель с помощью функции step(), возникает ошибка:
You must feed a value for placeholder tensor 'model/inputs/sequence_length' with dtype int32 and shape [?]
Я обнаружил, что на самом деле переменные, созданные get_variables(), используются совместно с моделью обучения, потому что они имеют одно и то же имя "model/variable_name". Но остальные переменные, включая все заполнители, используют разные имена. В обучающей модели это "модель / переменная_имя", а в тестовой модели "модель_1/ переменная_имя".
Поэтому я думаю, что, когда я передаю данные в тестовую модель, я фактически добавляю данные в "model_1/placeholder". И я думаю, что нет проблем.
На самом деле нет никаких проблем получить результаты теста, если я не добавлю self.merged в свой список результатов.
Однако когда я добавляю self.merged в список выходов, я получаю сообщение об ошибке, описанное выше. Это говорит о том, что я должен передать данные в модель /place_holder. вместо model_1/placeholder, который является place_holder тестовой модели.
Мне интересно, почему я должен вводить данные в свою модель обучения, когда я хочу передать данные в свою тестовую модель, чтобы получить сводку.
Или в моем коде что-то не так?