У меня есть модель Tensorflow 2.x, в которой используется уровень предварительной обработки TF (tf.keras.layers.DenseFeatures) и уровень распределения с вероятностью TF (DistributionLambda):
def regression_deep1_proba2(preprocessing_layer, feature_layer_inputs, model_name='test_model'):
model = tf.keras.Sequential([
preprocessing_layer,
tf.keras.layers.Dense(100, activation='relu', name='hidden_1'),
tf.keras.layers.Dense(50, activation='relu', name='hidden_2'),
tf.keras.layers.Dense(1 + 1, name='output'),
tfp.layers.DistributionLambda(
lambda t: tfd.LogNormal(loc=t[..., :1], scale=tf.math.softplus(0.05 * t[..., 1:]))
),
])
# ____________________ COMPILE WITH ____________________________________________
optimizer = tf.keras.optimizers.Adam()
negloglik = lambda y, p_y: -p_y.log_prob(y)
metrics = [
tf.keras.metrics.MeanAbsolutePercentageError()
]
model.compile(
loss=negloglik,
optimizer=optimizer,
metrics=metrics
)
# ____________________ CALLBACKS DEFINITION ___________________________________________
tbCallBack = tf.keras.callbacks.TensorBoard(
log_dir=f'./logs_regression/{model_name}',
update_freq='batch',
histogram_freq=1,
embeddings_freq=1,
write_graph=True,
write_images=True
)
# Create a callback that saves the model's weights every 5 epochs
cp_callback = tf.keras.callbacks.ModelCheckpoint(
filepath=f'./weights.{model_name}.hdf5',
verbose=1,
save_weights_only=True,
save_best_onlt=True,
monitor='MeanSquaredError'
)
early_stop = tf.keras.callbacks.EarlyStopping(
monitor='MeanSquaredError',
patience=2
)
callbacks_list = [tbCallBack, cp_callback, early_stop]
return model, callbacks_list
Я могу получить некоторые хорошие результаты для проблемы регрессии с этой моделью, но когда я сохраняю ее для дальнейшего использования, я больше не могу загрузить ее обратно (я перепробовал все онлайн-уроки и решения, но ничего не работает) !!
Я получаю различные типы ошибок в зависимости от того, как сохранить модель Tahat, но в целом у меня есть:
при использовании:
tf.keras.models.save_model(model, 'model_name.h5')
на
new_model = tf.keras.models.load_model('model_name.h5')
I get:
ValueError: ('We expected a dictionary here. Instead we got: ', <tf.Tensor 'Placeholder:0' shape=(None,) dtype=float32>)
Я не могу понять, что я делаю неправильно - любая помощь будет оценена?