ValueError: 未知层:功能

我在colab中制作了CNN,并在每个时代保存了模型。我导出了h5

文件,现在尝试在一些测试图像上运行模型。这是主要

错误:

ValueError: Unknown layer: Functional

这是我用于运行模型并在每个时期保存的代码:

epochs = 50

callbacks = [

tf.keras.callbacks.TensorBoard(log_dir='./logs'),

keras.callbacks.ModelCheckpoint("save_at_{epoch}.h5"),

]

model.compile(

optimizer=keras.optimizers.Adam(1e-3),

loss="binary_crossentropy",

metrics=["accuracy"],

)

model.fit(

train_ds, epochs=epochs, callbacks=callbacks, validation_data=val_ds,

)

模型运行后,我刚刚从colab侧边栏

本地下载了h5文件。我从本地磁盘重新上传了文件,这是我尝试

加载模型的方式:

# load and evaluate a saved model

from tensorflow.keras.models import load_model

# load model#

loaded_model = load_model('save_at_47.h5')

loaded_model.layers[0].input_shape

这是完整的追溯:

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

<ipython-input-4-6af7396280fa> in <module>()

3

4 # load model#

----> 5 loaded_model = load_model('save_at_47.h5')

6 loaded_model.layers[0].input_shape

5 frames

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/save.py in load_model(filepath, custom_objects, compile)

182 if (h5py is not None and (

183 isinstance(filepath, h5py.File) or h5py.is_hdf5(filepath))):

--> 184 return hdf5_format.load_model_from_hdf5(filepath, custom_objects, compile)

185

186 if sys.version_info >= (3, 4) and isinstance(filepath, pathlib.Path):

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/hdf5_format.py in load_model_from_hdf5(filepath, custom_objects, compile)

176 model_config = json.loads(model_config.decode('utf-8'))

177 model = model_config_lib.model_from_config(model_config,

--> 178 custom_objects=custom_objects)

179

180 # set weights

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/saving/model_config.py in model_from_config(config, custom_objects)

53 '`Sequential.from_config(config)`?')

54 from tensorflow.python.keras.layers import deserialize # pylint: disable=g-import-not-at-top

---> 55 return deserialize(config, custom_objects=custom_objects)

56

57

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)

107 module_objects=globs,

108 custom_objects=custom_objects,

--> 109 printable_module_name='layer')

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)

360 config = identifier

361 (cls, cls_config) = class_and_config_for_serialized_keras_object(

--> 362 config, module_objects, custom_objects, printable_module_name)

363

364 if hasattr(cls, 'from_config'):

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/generic_utils.py in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)

319 cls = get_registered_object(class_name, custom_objects, module_objects)

320 if cls is None:

--> 321 raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)

322

323 cls_config = config['config']

ValueError: Unknown layer: Functional

回答:

从头开始重建网络:

image_size = (212, 212)

batch_size = 32

data_augmentation = keras.Sequential(

[

layers.experimental.preprocessing.RandomFlip("horizontal_and_vertical"),

layers.experimental.preprocessing.RandomRotation(0.8),

]

)

def make_model(input_shape, num_classes):

inputs = keras.Input(shape=input_shape)

# Image augmentation block

x = data_augmentation(inputs)

# Entry block

x = layers.experimental.preprocessing.Rescaling(1.0 / 255)(x)

x = layers.Conv2D(32, 3, strides=2, padding="same")(x)

x = layers.BatchNormalization()(x)

x = layers.Activation("relu")(x)

x = layers.Conv2D(64, 3, padding="same")(x)

x = layers.BatchNormalization()(x)

x = layers.Activation("relu")(x)

previous_block_activation = x # Set aside residual

for size in [128, 256, 512, 728]:

x = layers.Activation("relu")(x)

x = layers.SeparableConv2D(size, 3, padding="same")(x)

x = layers.BatchNormalization()(x)

x = layers.Activation("relu")(x)

x = layers.SeparableConv2D(size, 3, padding="same")(x)

x = layers.BatchNormalization()(x)

x = layers.MaxPooling2D(3, strides=2, padding="same")(x)

# Project residual

residual = layers.Conv2D(size, 1, strides=2, padding="same")(

previous_block_activation

)

x = layers.add([x, residual]) # Add back residual

previous_block_activation = x # Set aside next residual

x = layers.SeparableConv2D(1024, 3, padding="same")(x)

x = layers.BatchNormalization()(x)

x = layers.Activation("relu")(x)

x = layers.GlobalAveragePooling2D()(x)

if num_classes == 2:

activation = "sigmoid"

units = 1

else:

activation = "softmax"

units = num_classes

x = layers.Dropout(0.5)(x)

outputs = layers.Dense(units, activation=activation)(x)

return keras.Model(inputs, outputs)

model = make_model(input_shape=image_size + (3,), num_classes=2)

keras.utils.plot_model(model, show_shapes=False)

Loaded the weights:

model.load_weights('save_at_47.h5')

And ran a prediction on an image:

# Running inference on new data

img = keras.preprocessing.image.load_img(

"le_image.jpg", target_size=image_size

)

img_array = keras.preprocessing.image.img_to_array(img)

img_array = tf.expand_dims(img_array, 0) # Create batch axis

predictions = model.predict(img_array)

score = predictions[0]

print(

"This image is %.2f percent negative and %.2f percent positive."

% (100 * (1 - score), 100 * score)

)

以上是 ValueError: 未知层:功能 的全部内容, 来源链接: utcz.com/qa/422629.html

回到顶部