我可以用tensorflow keras模型优化工具包对keras预训练模型进行修剪吗?

我可以用tensorflow keras模型优化工具包对keras预训练模型进行修剪吗?,tensorflow,keras,deep-learning,pruning,Tensorflow,Keras,Deep Learning,Pruning,我有keras预训练模型(模型h5)。我想用基于tensorflow震级的权重修剪和Keras修剪这个模型。一件奇怪的事情是,我的预训练模型是用原始的keras模型构建的,我的意思是它不是来自tensorflow.keras。在以Keras为例的基于tensorflow震级的权重修剪中,他们展示了如何使用tensorflow.Keras模型。我想问的是,我可以使用他们的工具来修剪我的原始keras预训练模型吗 在他们的体重修剪工具包中,有两种方法。一种是在训练过程中对模型进行分层剪枝,另一种是对

我有keras预训练模型(模型h5)。我想用基于tensorflow震级的权重修剪和Keras修剪这个模型。一件奇怪的事情是,我的预训练模型是用原始的keras模型构建的,我的意思是它不是来自tensorflow.keras。在以Keras为例的基于tensorflow震级的权重修剪中,他们展示了如何使用tensorflow.Keras模型。我想问的是,我可以使用他们的工具来修剪我的原始keras预训练模型吗

在他们的体重修剪工具包中,有两种方法。一种是在训练过程中对模型进行分层剪枝,另一种是对整个模型进行剪枝。我尝试了第二种方法来修剪整个预训练模型。下面是我的代码。 在他们的体重修剪工具包中,有两种方法。一种是在训练过程中对模型进行分层剪枝,另一种是对整个模型进行剪枝。我尝试了第二种方法来修剪整个预训练模型。下面是我的代码。 对于我的原始预训练模型,我从model.h5加载权重,在应用prune_low_magnity()后可以调用model.summary(),model中的任何方法都不能调用include model.summary()方法。并显示类似AttributeError的错误:“非类型”对象没有属性“摘要”

model = get_training_model(weight_decay)
model.load_weights('model/keras/model.h5')
model.summary()


epochs = 1
end_step = np.ceil(1.0 * 100 / 2).astype(np.int32) * epochs
print(end_step)

new_pruning_params = {
      'pruning_schedule': tfm.sparsity.keras.PolynomialDecay(initial_sparsity=0.1,
                                                   final_sparsity=0.90,
                                                   begin_step=40,
                                                   end_step=end_step,
                                                   frequency=30)
}

new_pruned_model = tfm.sparsity.keras.prune_low_magnitude(model, **new_pruning_params)
print(new_pruned_model.summary())
在他们的减重工具箱里 ,有两条路。一种是在训练过程中对模型进行分层剪枝,另一种是对整个模型进行剪枝。我尝试了第二种方法来修剪整个预训练模型。下面是我的代码。 对于我的原始预训练模型,我从model.h5加载权重,在应用prune_low_magnity()后可以调用model.summary(),model中的任何方法都不能调用include model.summary()方法。并将错误显示为

AttributeError:“非类型”对象没有属性“摘要”

model = get_training_model(weight_decay)
model.load_weights('model/keras/model.h5')
model.summary()


epochs = 1
end_step = np.ceil(1.0 * 100 / 2).astype(np.int32) * epochs
print(end_step)

new_pruning_params = {
      'pruning_schedule': tfm.sparsity.keras.PolynomialDecay(initial_sparsity=0.1,
                                                   final_sparsity=0.90,
                                                   begin_step=40,
                                                   end_step=end_step,
                                                   frequency=30)
}

new_pruned_model = tfm.sparsity.keras.prune_low_magnitude(model, **new_pruning_params)
print(new_pruned_model.summary())

我希望这个答案仍然有用,但我最近遇到了同样的问题,
prune\u low\u magnity()
返回类型为“None”的对象。另外,
new\u pruned\u model.compile()
也无法工作

我使用的模型是一个经过预训练的模型,可以从
tensorflow.python.keras.applications
导入

对我来说,这很有效:

(0)导入库:

from tensorflow_model_optimization.python.core.api.sparsity import keras as sparsity
from tensorflow.python.keras.applications.<network_type> import <network_type>
(3) 设置修剪参数并指定修剪计划

# set pruning parameters
pruning_params = {
  'pruning_schedule': sparsity.PolynomialDecay(...)
}

# assign pruning schedule
model_pruned = sparsity.prune_low_magnitude(loaded_model, **pruning_params)
(4) 编译模型并显示摘要

# compile model
model_pruned.compile(
loss=tf.keras.losses.categorical_crossentropy,
optimizer='SGD',
metrics=['accuracy'])

model_pruned.summary()
特别是从
tensorflow.python.keras
导入库并从tensorflow库中使用这个keras模型是很重要的

此外,使用TensorFlow Beta版本也很重要(
pip install TensorFlow==2.0.0b1
),否则
prune\u low\u magnity
仍将返回类型为“None”的对象


我使用PyCharm 2019.1.3(x64)作为IDE。以下是引导我找到此解决方案的链接:

您是否尝试了此解决方案,如果有效,请将问题标记为已回答?:)
# compile model
model_pruned.compile(
loss=tf.keras.losses.categorical_crossentropy,
optimizer='SGD',
metrics=['accuracy'])

model_pruned.summary()