Я тренирую модель с формой объекта [3751,4], и я хотел бы использовать функцию изменения формы и плотного слоя, встроенную в Tensorflow, чтобы выходные метки имели форму [1,6].
Набор для обучения и тестирования очень похож, единственное отличие состоит в том, что набор данных для тестирования содержит меньше пакетов, чем набор для обучения.
Теперь у меня есть два скрытых слоя в моей модели, которые будут выполнять что-то вроде:
input_layer = tf.reshape(features["x"], [1,-1])
first_hidden_layer = tf.layers.dense(input_layer, 4, activation=tf.nn.relu)
second_hidden_layer = tf.layers.dense(first_hidden_layer, 5, activation=tf.nn.relu)
output_layer = tf.layers.dense(second_hidden_layer, 6, activation=tf.nn.relu)
Эта структура сети является функцией, которую используют как этап обучения, так и этап оценки.
Частичный код для обучения выглядит так:
nn = tf.estimator.Estimator(model_fn=model_fn, params=model_params, model_dir='/tmp/nmos_self_define')
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": train_features_numpy},
y=train_labels_numpy,
batch_size = 3751,
num_epochs=None,
shuffle=False)
# Train
nn.train(input_fn=train_input_fn, max_steps=5000)
И часть тестирования похожа на:
test_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": test_features_numpy},
y=test_labels_numpy,
batch_size = 3751,
num_epochs= 1,
shuffle=False)
ev = nn.evaluate(input_fn=test_input_fn)
print("Loss: %s" % ev["loss"])
print("Root Mean Squared Error: %s" % ev["rmse"])
Во время обучения нет проблем, функция может изменить формувходные данные и сделать плотную часть.Однако во время тестирования тензорная форма функции изменения формы дает что-то вроде [1,?], Что отличается от фазы обучения ([1,15004]).И это привело к сбою функций tf.layers.dense, потому что он не может выполнить плотное вычисление, не зная действительной формы тензора.
Единственное различие между обучением и тестированием с моей точки зрения - это num_epochs, но это не должноне влияет на форму ввода правильно?Я не понимаю, почему Tensorflow может преобразовывать тензор с твердыми значениями во время обучения, в то время как он думает, что набор входных данных тестирования является динамическим?
Пожалуйста, помогите и спасибо, что нашли время, читая мой вопрос.