【问题标题】:tensorflow model with keras and tensorflow_addons layer is not getting loaded具有 keras 和 tensorflow_addons 层的 tensorflow 模型未加载
【发布时间】: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


【解决方案1】:

我怀疑您分别安装了kerastensorflow;我曾与tfa 合作过,从未遇到过关于此类装载问题的问题;

实际上,这里你通过tensorflow 导入所有内容:

import tensorflow as tf
import tensorflow.keras as tk
import tensorflow_addons as tfa

但是在这里你通过普通的keras 加载回调:

from keras.callbacks import ModelCheckpoint, EarlyStopping

为了首先确保您确实遇到了加载模型问题,请确保每次导入都是通过tensorflow.keras 完成的(我希望一旦您这样做,问题就会完全消失)。

替换

from keras.callbacks import ModelCheckpoint, EarlyStopping

与:

from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping

总结一下,用新的导入(全部来自tensorflow.keras)从头开始重新训练,然后检查问题是否重现。

【讨论】:

  • 这次出现了一个新的层号:“__inference_dense_layer_call_fn_358721” 我应该将 tensorflow_addons 层的类添加为自定义层吗?如果需要,您能否帮我编写代码,因为我不知道如何添加自定义指标或自定义图层。 [我在 Kaggle 环境中使用它,偏好设置为“最新”]
  • 这里是我说的模型kaggle.com/timothyalexjohn/moa-imbalanced-multi-label请下载模型并尝试将模型加载到tf.keras你也会得到一个错误...请帮助我理解错误并纠正它。 ..谢谢你
猜你喜欢
  • 2019-04-12
  • 2020-06-24
  • 2021-03-08
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
相关资源
最近更新 更多