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

我正在尝试修剪预训练模型:MobileNetV2,但出现此错误。尝试在网上搜索,无法理解。我在Google Colab上运行。


这些是我的进口商品。


import tensorflow as tf

import tensorflow_model_optimization as tfmot

import tensorflow_datasets as tfds

from tensorflow import keras


import os

import numpy as np

import matplotlib.pyplot as plt

import tempfile

import 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_magnitude


pruning_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'>


紫衣仙女
浏览 193回答 5
5回答

四季花海

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

qq_花开花谢_0

如下保存模型并重新加载对我有用。_, keras_file = tempfile.mkstemp('.h5')tf.keras.models.save_model(model, keras_file, include_optimizer=False)print('Saved baseline model to:', keras_file)

拉丁的传说

今天有同样的问题,它的以下错误。如果您不想修剪该层或不关心它,您可以使用此代码仅修剪模型中的可修剪层:from tensorflow_model_optimization.python.core.sparsity.keras import prunable_layerfrom tensorflow_model_optimization.python.core.sparsity.keras import prune_registrydef apply_pruning_to_prunable_layers(layer):&nbsp; &nbsp; if isinstance(layer, prunable_layer.PrunableLayer) or hasattr(layer, 'get_prunable_weights') or prune_registry.PruneRegistry.supports(layer):&nbsp; &nbsp; &nbsp; &nbsp; return tfmot.sparsity.keras.prune_low_magnitude(layer)&nbsp; &nbsp; print("Not Prunable: ", layer)&nbsp; &nbsp; return layermodel_for_pruning = tf.keras.models.clone_model(&nbsp; &nbsp; base_model,&nbsp; &nbsp; clone_function=apply_pruning_to_pruneable_layers)

元芳怎么了

我遇到了同样的问题:张量流版本:2.2.0只是更新tensorflow的版本就2.3.0解决了这个问题,我认为Tensorflow在2.3.0中增加了对这个特性的支持。

扬帆大鱼

我发现的一件事是我添加到模型中的实验性预处理引发了这个错误。我在模型的开头使用它来帮助添加更多训练样本,但 keras 修剪代码不喜欢这样的子类模型。同样,代码不喜欢我对图像居中所做的实验性预处理。从模型中删除预处理为我解决了这个问题。def classificationModel(trainImgs, testImgs):&nbsp; L2_lambda = 0.01&nbsp; data_augmentation = tf.keras.Sequential(&nbsp; [ layers.experimental.preprocessing.RandomFlip("horizontal", input_shape=IM_DIMS),&nbsp; &nbsp; layers.experimental.preprocessing.RandomRotation(0.1),&nbsp; &nbsp; layers.experimental.preprocessing.RandomZoom(0.1),])&nbsp; model = tf.keras.Sequential()&nbsp; model.add(data_augmentation)&nbsp; model.add(layers.experimental.preprocessing.Rescaling(1./255, input_shape=IM_DIMS))...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python