我为Keras模型使用了一个自定义层,即DepthwiseConv3D层。
我训练了模型并使用model.save("model.h5")
from DepthwiseConv3D import DepthwiseConv3D
model = load_model('model.h5',
custom_objects={'DepthwiseConv3D': DepthwiseConv3D})
但是我收到了DepthWiseConv3D在以下位置引发的“ TypeError:乱序类型:NoneType()> int()”。
if (self.groups > self.input_dim):
raise ValueError('The number of groups cannot exceed the number of channels')
图层配置为:
def get_config(self):
config = super(DepthwiseConv3D, self).get_config()
config.pop('filters')
config.pop('kernel_initializer')
config.pop('kernel_regularizer')
config.pop('kernel_constraint')
config['depth_multiplier'] = self.depth_multiplier
config['depthwise_initializer'] = initializers.serialize(self.depthwise_initializer)
config['depthwise_regularizer'] = regularizers.serialize(self.depthwise_regularizer)
config['depthwise_constraint'] = constraints.serialize(self.depthwise_constraint)
return config
我实例化为
x = DepthwiseConv3D(kernel_size=(7,7,7),
depth_multiplier=1,groups=9,
padding ="same", use_bias=False,
input_shape=(50, 37, 25, 9))(x)
x = DepthwiseConv3D(depth_multiplier= 32, groups=8, kernel_size=(7,7,7),
strides=(2,2,2), activation='relu', padding = "same")(x)
x = DepthwiseConv3D(depth_multiplier= 64, groups=8, kernel_size=(7,7,7),
strides=(2,2,2), activation='relu', padding = "same")(x)
如何加载我的模型?
答案 0 :(得分:1)
您使用的自定义层中的get_config
方法未正确实现,它没有保存所需的所有参数,因此在加载模型时出错。
如果可以使用相同的原始代码实例化模型,则可以使用model.load_weights
从同一文件加载权重。这只是解决问题的方法,它应该可以工作。适当的解决方案是实施正确版本的get_config
,这将需要重新训练模型。