【发布时间】:2021-01-19 08:43:46
【问题描述】:
我已经从 tensorflow_addons 训练了一个带有 keras 层和 weight_normalization 层的模型。这是我训练的模型并以 tensorflow 文件格式保存:
import tensorflow as tf
import tensorflow.keras as tk
import tensorflow_addons as tfa
model = tf.keras.Sequential([
tf.keras.layers.Input((X_train.shape[1]-1,)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.2),
tfa.layers.WeightNormalization(tf.keras.layers.Dense(2048, activation="relu")),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.5),
tfa.layers.WeightNormalization(tf.keras.layers.Dense(1048, activation="relu")),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.5),
tfa.layers.WeightNormalization(tf.keras.layers.Dense(206, activation="sigmoid")),
])
(它没有自定义指标)
from keras.callbacks import ModelCheckpoint, EarlyStopping
# autosave best Model
best_model = ModelCheckpoint("model", monitor='val_accuracy', mode='max',verbose=0, save_best_only=True)
earlystop = EarlyStopping(monitor = 'val_accuracy',
patience = 15,
mode = 'max',
verbose = 1,
restore_best_weights = True)
callbacks = [best_model, earlystop]
model.compile(loss= 'binary_crossentropy',optimizer= 'Adam',metrics= ['accuracy'])
history = model.fit(X_res, y_res, epochs=100, verbose= 2, validation_data=(X_val[X_val.columns[1:]],y_val[y_val.columns[1:]]), callbacks=callbacks)
但是当我加载模型时它返回一个错误:
model = tk.models.load_model("../input/model")
----------------------------------- ---------------------------- KeyError Traceback(最近一次调用 最后)在 2 返回 3 ----> 4 模型 = tk.models.load_model("../input/model-custom", custom_objects={'__inference_dense_layer_call_fn_1126407':f1})
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/save.py 在 load_model(文件路径,custom_objects,编译,选项) 185 如果是实例(文件路径,六个.string_types): 186 loader_impl.parse_saved_model(文件路径) --> 187 return saved_model_load.load(文件路径,编译,选项) 188 第189章
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/load.py 在加载(路径,编译,选项) 119 120模型= tf_load.load_internal( --> 121 路径,options=options,loader_cls=KerasObjectLoader) 122 123 # pylint:禁用=保护访问
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py 在 load_internal(export_dir,标签,选项,loader_cls) 631尝试: 第632章 --> 633 ckpt_options) 634 除了错误。NotFoundError 作为错误: 第635章
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/load.py 在 init(self, *args, **kwargs) 192 自我._models_to_reconstruct = [] 193 --> 194 super(KerasObjectLoader, self).init(*args, **kwargs) 195 196 # 现在节点对象已经完全加载,并且检查点已经
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py 在 init(self, object_graph_proto, saved_model_proto, export_dir, ckpt_options) 第128章 129 --> 130 self._load_all() 131 self._restore_checkpoint() 132
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/load.py 在 _load_all(self) 216 217 # 加载所有其他节点和函数。 --> 218 super(KerasObjectLoader, self)._load_all() 219 220 # 完成图层和模型的设置。有关详细信息,请参阅函数文档字符串。
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py 在 _load_all(self) 第139章 140 """从 SavedModel 及其边缘加载所有节点和函数。""" --> 141 self._load_nodes() 第142章 143 # TODO(b/124045874): 捕获的函数存在限制
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py 在 _load_nodes(self) 281#接口。 282 继续 --> 283 节点,setter = self._recreate(proto, node_id) 284 个节点 [node_id] = 节点 第285章
/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/load.py 在 _recreate(self, proto, node_id) 237 obj._handle_name = proto.variable.name + ':0' 238 其他: --> 239 obj, setter = super(KerasObjectLoader, self)._recreate(proto, node_id) 240 返回对象,设置器 241
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py 在 _recreate(self, proto, node_id) 391 如果工厂没有实物: 392 raise ValueError("Unknown SavedObject type: %r" % kind) --> 393 返回工厂种类 394 第395章
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py 在 () 380 lambda:self._recreate_user_object(proto.user_object,node_id)) 381 “资产”:lambda:self._recreate_asset(proto.asset) --> 382 "函数": lambda: self._recreate_function(proto.function), 第383章 第384章
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py 在 _recreate_function(self, proto) 第419章 420 return function_deserialization.recreate_function( --> 421 原型,self._concrete_functions),setattr 422 第423章
/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/function_deserialization.py 在 recreate_function(saved_function,concrete_functions) 第259章 260 为具体功能名称在 saved_function.concrete_functions 中: --> 261 具体功能对象.附加(具体功能[具体功能名称]) 262 263 for cf in concrete_function_objects:
KeyError:'__inference_dense_layer_call_fn_1126407'
你能帮我正确加载模型吗..谢谢
【问题讨论】:
-
请告诉我们您是如何保存和加载模型的。
-
是的,我也添加了代码
-
@rayryeng 这是我所说的模型 kaggle.com/timothyalexjohn/moa-imbalanced-multi-label 请下载模型并尝试将模型加载到 tf.keras 你也会得到一个错误...请帮助我理解错误并纠正它...谢谢
-
我用最近的 TF/keras 2.7 尝试过(没有 model.fit)并且可以成功加载模型。你能分享一个玩具数据集或更新我的gist。谢谢
标签: tensorflow deep-learning tensorflow2.0 keras-layer tf.keras