【发布时间】:2021-10-09 21:33:52
【问题描述】:
我在保存 ML 模型时遇到错误。我在这里搜索了 SO,看起来建议是将函数的参数更改为 '=None'。但是当我尝试这样做时,我得到了一个错误None types are not iterable。有什么想法吗?
# Save the model
model.save('./alexnet_model.hdf5')
# Load the model
alexnet_model = tf.keras.models.load_model('./alexnet_model.hdf5', custom_objects={'AlexNet': AlexNet})
错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-76-504e90d49459> in <module>()
6 model.save('./alexnet_model.hdf5')
7 # Load the model
----> 8 alexnet_model = tf.keras.models.load_model('./alexnet_model.hdf5', custom_objects={'AlexNet': AlexNet})
9 #alexnet_model = tf.keras.models.load_model('./alexnet_model.hdf5')
5 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py in from_config(cls, config, custom_objects)
428 build_input_shape = None
429 layer_configs = config
--> 430 model = cls(name=name)
431 for layer_config in layer_configs:
432 layer = layer_module.deserialize(layer_config,
TypeError: __init__() missing 2 required positional arguments: 'input_shape' and 'num_classes'
这是模型架构的前几行:
# Define the AlexNet model
class AlexNet(Sequential):
def __init__(self, input_shape, num_classes, **kwargs):
super().__init__()
尝试使用 get_config 函数更新 AlexNet 架构:
# Define the AlexNet model
class AlexNet(Sequential):
def __init__(self, input_shape, num_classes, **kwargs):
super().__init__()
self.add(Conv2D(96, kernel_size=(11,11), strides= 4,
padding= 'valid', activation= 'relu',
input_shape= input_shape, kernel_initializer= 'he_normal'))
self.add(BatchNormalization())
self.add(MaxPooling2D(pool_size=(3,3), strides= (2,2),
padding= 'valid', data_format= None))
self.add(Conv2D(256, kernel_size=(5,5), strides= 1,
padding= 'same', activation= 'relu',
kernel_initializer= 'he_normal'))
self.add(BatchNormalization())
self.add(MaxPooling2D(pool_size=(3,3), strides= (2,2),
padding= 'valid', data_format= None))
self.add(Conv2D(384, kernel_size=(3,3), strides= 1,
padding= 'same', activation= 'relu',
kernel_initializer= 'he_normal'))
self.add(BatchNormalization())
self.add(Conv2D(384, kernel_size=(3,3), strides= 1,
padding= 'same', activation= 'relu',
kernel_initializer= 'he_normal'))
self.add(BatchNormalization())
self.add(Conv2D(256, kernel_size=(3,3), strides= 1,
padding= 'same', activation= 'relu',
kernel_initializer= 'he_normal'))
self.add(BatchNormalization())
self.add(MaxPooling2D(pool_size=(3,3), strides= (2,2),
padding= 'valid', data_format= None))
self.add(Flatten())
self.add(Dense(num_classes, activation= 'sigmoid')) #try sigmoid vs. softmax
self.compile(optimizer= tf.keras.optimizers.Adam(learning_rate=lr_schedule),
loss='binary_crossentropy',
metrics=['accuracy'])
def get_config(self):
return {'input_shape': (256, 256, 3), 'num_classes': 3}
仍然遇到同样的错误:
# Save the model
model.save('./alexnet_model.hdf5')
# Load the model
alexnet_model = tf.keras.models.load_model('./alexnet_model.hdf5', custom_objects={'AlexNet': AlexNet})
【问题讨论】:
标签: python tensorflow machine-learning keras