【发布时间】:2020-01-27 15:00:14
【问题描述】:
我有一个 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')
我明白了:
ValueError: ('We expected a dictionary here. Instead we got: ', <tf.Tensor 'Placeholder:0' shape=(None,) dtype=float32>)
我不知道我做错了什么 - 任何帮助将不胜感激?
【问题讨论】:
标签: python tensorflow tf.keras tensorflow-probability