为了账号安全,请及时绑定邮箱和手机立即绑定

我们能够修剪预训练模型吗?示例:MobileNetV2

我们能够修剪预训练模型吗?示例:MobileNetV2

紫衣仙女 2022-12-06 15:17:33
我正在尝试修剪预训练模型:MobileNetV2,但出现此错误。尝试在网上搜索,无法理解。我在Google Colab上运行。这些是我的进口商品。import tensorflow as tfimport tensorflow_model_optimization as tfmotimport tensorflow_datasets as tfdsfrom tensorflow import kerasimport osimport numpy as npimport matplotlib.pyplot as pltimport tempfileimport zipfile这是我的代码。model_1 = keras.Sequential([    basemodel,    keras.layers.GlobalAveragePooling2D(),    keras.layers.Dense(1)                            ])model_1.compile(optimizer='adam',                loss=keras.losses.BinaryCrossentropy(from_logits=True),                metrics=['accuracy'])model_1.fit(train_batches,            epochs=5,            validation_data=valid_batches)prune_low_magnitude = tfmot.sparsity.keras.prune_low_magnitudepruning_params = {    'pruning_schedule': tfmot.sparsity.keras.PolynomialDecay(initial_sparsity=0.50,                                                             final_sparsity=0.80,                                                             begin_step=0,                                                             end_step=end_step)}model_2 = prune_low_magnitude(model_1, **pruning_params)model_2.compile(optmizer='adam',                loss=keres.losses.BinaryCrossentropy(from_logits=True),                metrics=['accuracy'])这是我得到的错误。---> 12 model_2 = prune_low_magnitude(model, **pruning_params)ValueError: Please initialize `Prune` with a supported layer. Layers should either be a `PrunableLayer` instance, or should be supported by the PruneRegistry. You passed: <class 'tensorflow.python.keras.engine.training.Model'>
查看完整描述

5 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

我相信您正在关注Pruning in Keras Example并跳入Fine-tune pre-trained model with pruning部分而没有设置可修剪层。您必须重新实例化模型并设置您希望设置为的图层prunable。请按照本指南了解有关如何设置可修剪层的更多信息。

https://www.tensorflow.org/model_optimization/guide/pruning/comprehensive_guide.md


查看完整回答
反对 回复 2022-12-06
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

如下保存模型并重新加载对我有用。


_, keras_file = tempfile.mkstemp('.h5')

tf.keras.models.save_model(model, keras_file, include_optimizer=False)

print('Saved baseline model to:', keras_file)


查看完整回答
反对 回复 2022-12-06
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

今天有同样的问题,它的以下错误。


如果您不想修剪该层或不关心它,您可以使用此代码仅修剪模型中的可修剪层:


from tensorflow_model_optimization.python.core.sparsity.keras import prunable_layer

from tensorflow_model_optimization.python.core.sparsity.keras import prune_registry


def apply_pruning_to_prunable_layers(layer):

    if isinstance(layer, prunable_layer.PrunableLayer) or hasattr(layer, 'get_prunable_weights') or prune_registry.PruneRegistry.supports(layer):

        return tfmot.sparsity.keras.prune_low_magnitude(layer)

    print("Not Prunable: ", layer)

    return layer


model_for_pruning = tf.keras.models.clone_model(

    base_model,

    clone_function=apply_pruning_to_pruneable_layers

)


查看完整回答
反对 回复 2022-12-06
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我遇到了同样的问题:

  • 张量流版本:2.2.0

只是更新tensorflow的版本就2.3.0解决了这个问题,我认为Tensorflow在2.3.0中增加了对这个特性的支持。



查看完整回答
反对 回复 2022-12-06
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

我发现的一件事是我添加到模型中的实验性预处理引发了这个错误。我在模型的开头使用它来帮助添加更多训练样本,但 keras 修剪代码不喜欢这样的子类模型。同样,代码不喜欢我对图像居中所做的实验性预处理。从模型中删除预处理为我解决了这个问题。


def classificationModel(trainImgs, testImgs):

  L2_lambda = 0.01

  data_augmentation = tf.keras.Sequential(

  [ layers.experimental.preprocessing.RandomFlip("horizontal", input_shape=IM_DIMS),

    layers.experimental.preprocessing.RandomRotation(0.1),

    layers.experimental.preprocessing.RandomZoom(0.1),])


  model = tf.keras.Sequential()

  model.add(data_augmentation)

  model.add(layers.experimental.preprocessing.Rescaling(1./255, input_shape=IM_DIMS))

...


查看完整回答
反对 回复 2022-12-06
  • 5 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信