加载包含 Lambda 层的 Keras 模型时出现 AttributeError

萨尔克斯

我正在尝试加载经过训练的 keras 模型(SeResnext),并且该模型架构也包含“Lambda”层。

现在,当我尝试在脚本中加载模型时,出现此属性错误:

Traceback (most recent call last):
  File "predict.py", line 9, in <module>
    model = keras.models.load_model('mySeResnextModel.hdf5')
  File "/usr/local/lib/python3.6/site-packages/keras/engine/saving.py", line 419, in load_model
    model = _deserialize_model(f, custom_objects, compile)
  File "/usr/local/lib/python3.6/site-packages/keras/engine/saving.py", line 225, in _deserialize_model
    model = model_from_config(model_config, custom_objects=custom_objects)
  File "/usr/local/lib/python3.6/site-packages/keras/engine/saving.py", line 458, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "/usr/local/lib/python3.6/site-packages/keras/layers/__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "/usr/local/lib/python3.6/site-packages/keras/utils/generic_utils.py", line 145, in deserialize_keras_object
    list(custom_objects.items())))
  File "/usr/local/lib/python3.6/site-packages/keras/engine/network.py", line 1022, in from_config
    process_layer(layer_data)
  File "/usr/local/lib/python3.6/site-packages/keras/engine/network.py", line 1008, in process_layer
    custom_objects=custom_objects)
  File "/usr/local/lib/python3.6/site-packages/keras/layers/__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "/usr/local/lib/python3.6/site-packages/keras/utils/generic_utils.py", line 145, in deserialize_keras_object
    list(custom_objects.items())))
  File "/usr/local/lib/python3.6/site-packages/keras/layers/core.py", line 732, in from_config
    printable_module_name='function in Lambda layer')
  File "/usr/local/lib/python3.6/site-packages/keras/utils/generic_utils.py", line 162, in deserialize_keras_object
    fn = module_objects.get(function_name)
AttributeError: 'NoneType' object has no attribute 'get'

我认为这是因为 Keras 没有任何名为 Lambda 的内置层,所以它根本无法识别这一层。

现在,当我搜索这个问题时,我得到的唯一但不太有益的解决方案是删除 lambda 层,但在我的情况下,它们太多了。我也可以导入然后使用 Lambda 层作为自定义层吗?

请帮我找到这个问题的解决方案,任何指针将不胜感激!

提前致谢。

PS:我在搜索后找到了这个(https://github.com/keras-team/keras/issues/4871),我如何在这里使用自定义对象参数?

阿列克谢

实际上 Keras 有 Lambda 层 ( keras.layers.Lambda) 但问题是由它使用的函数引起的。

要解决它,您可以通过custom_objects参数传递所需的函数,例如:


def channel_zeropad(x, channel_axis=3):
    '''
    Zero-padding for channle dimensions.
    Note that padded channles are added like (Batch, H, W, 2/x + x + 2/x).
    '''
    shape = list(x.shape)
    y = K.zeros_like(x)

    if channel_axis == 3:
        y = y[:, :, :, :shape[channel_axis] // 2]
    else:
        y = y[:, :shape[channel_axis] // 2, :, :]

    return concatenate([y, x, y], channel_axis)

def channel_zeropad_output(input_shape, channel_axis=3):
    '''
    Function for setting a channel dimension for zero padding.
    '''
    shape = list(input_shape)
    shape[channel_axis] *= 2

    return tuple(shape)

model = keras.models.load_model('mySeResnextModel.hdf5',
              custom_objects={'channel_zeropad': channel_zeropad,
                              'channel_zeropad_output': channel_zeropad_output})

或分别定义模型及其负载权重:

model = SEResNeXt().model  # if you are using senet-keras
model.load_weights('mySeResnextModel.hdf5', by_name=True)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Keras 中使用 Lambda 层时出现符号张量值错误

来自分类Dev

编译加载的模型时出现 Keras ValueError

来自分类Dev

Keras 权重文件加载异常:将 2 层加载到具有 0 层的模型中

来自分类Dev

Keras的CNN模型条件层

来自分类Dev

获取Keras模型/层的输出

来自分类Dev

尝试在Keras中加载顺序模型时出现“ KeyError:0”

来自分类Dev

使用theano后端加载keras模型时出现断言错误

来自分类Dev

由于使用“ lambda”,因此无法加载保存的Keras模型

来自分类Dev

从加载的 Keras 模型调用“predict_generator”时出现属性错误

来自分类Dev

如何解决(“ ValueError:您正在尝试将包含16层的权重文件加载到0层的模型中”)

来自分类Dev

keras 连接多个层导致 AttributeError: 'NoneType' 对象没有属性 '_inbound_nodes'

来自分类Dev

提取包含3个嵌入层的Keras串联层,但这是一个空列表

来自分类Dev

内部Keras模型中具有多个嵌入层的问题

来自分类Dev

Keras ModelCheckpoint在保存模型的同时引入了其他层

来自分类Dev

Keras模型未训练层,验证精度始终为0.5

来自分类Dev

如何在Keras模型中添加卷积层?

来自分类Dev

将千层面模型转换为 Keras

来自分类Dev

如何在 keras 模型中启用给定层可训练?

来自分类Dev

我想只用 FC 层收敛 keras 模型

来自分类Dev

如何加载Keras模型?

来自分类Dev

在Keras中加载模型

来自分类Dev

在 keras 中加载模型

来自分类Dev

如何使用 lambda 层更改模型的输入形状

来自分类Dev

使用keras自定义层时生成错误

来自分类Dev

Tensorflow Keras-堆叠LSTM层时出错

来自分类Dev

Keras Lambda层执行最大值并以(?,1)形状输出

来自分类Dev

即使只调用一次,Keras Lambda 层也会运行两次

来自分类Dev

合并层的Keras错误

来自分类Dev

了解Keras层的形状

Related 相关文章

  1. 1

    在 Keras 中使用 Lambda 层时出现符号张量值错误

  2. 2

    编译加载的模型时出现 Keras ValueError

  3. 3

    Keras 权重文件加载异常:将 2 层加载到具有 0 层的模型中

  4. 4

    Keras的CNN模型条件层

  5. 5

    获取Keras模型/层的输出

  6. 6

    尝试在Keras中加载顺序模型时出现“ KeyError:0”

  7. 7

    使用theano后端加载keras模型时出现断言错误

  8. 8

    由于使用“ lambda”,因此无法加载保存的Keras模型

  9. 9

    从加载的 Keras 模型调用“predict_generator”时出现属性错误

  10. 10

    如何解决(“ ValueError:您正在尝试将包含16层的权重文件加载到0层的模型中”)

  11. 11

    keras 连接多个层导致 AttributeError: 'NoneType' 对象没有属性 '_inbound_nodes'

  12. 12

    提取包含3个嵌入层的Keras串联层,但这是一个空列表

  13. 13

    内部Keras模型中具有多个嵌入层的问题

  14. 14

    Keras ModelCheckpoint在保存模型的同时引入了其他层

  15. 15

    Keras模型未训练层,验证精度始终为0.5

  16. 16

    如何在Keras模型中添加卷积层?

  17. 17

    将千层面模型转换为 Keras

  18. 18

    如何在 keras 模型中启用给定层可训练?

  19. 19

    我想只用 FC 层收敛 keras 模型

  20. 20

    如何加载Keras模型?

  21. 21

    在Keras中加载模型

  22. 22

    在 keras 中加载模型

  23. 23

    如何使用 lambda 层更改模型的输入形状

  24. 24

    使用keras自定义层时生成错误

  25. 25

    Tensorflow Keras-堆叠LSTM层时出错

  26. 26

    Keras Lambda层执行最大值并以(?,1)形状输出

  27. 27

    即使只调用一次,Keras Lambda 层也会运行两次

  28. 28

    合并层的Keras错误

  29. 29

    了解Keras层的形状

热门标签

归档