首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用tensorflow keras模型优化工具包对keras预训练模型进行剪枝吗?

我能用tensorflow keras模型优化工具包对keras预训练模型进行剪枝吗?
EN

Stack Overflow用户
提问于 2019-05-31 08:03:56
回答 1查看 1.2K关注 0票数 4

我有角星预训练模型(model.h5)。我想用tensorflow基于量值的模型,用Keras剪枝。一个奇怪的事情是,我的预先训练过的模型是用原始的keras模型构建的,我的意思是它不是来自tensorflow.keras的。在tensorflow基于量值的权值剪枝与Keras示例中,他们展示了如何处理tensorflow.keras模型.我想问的是,我能用他们的工具修剪我原来的角粒预训练模型吗?

在他们的重量修剪工具包中,有两种方法。一种是在训练过程中逐层修剪模型,二是对整个模型进行剪枝。我尝试了第二种方法来修剪整个预先训练过的模型。下面是我的密码。在他们的重量修剪工具包中,有两种方法。一种是在训练过程中逐层修剪模型,二是对整个模型进行剪枝。我尝试了第二种方法来修剪整个预先训练过的模型。下面是我的密码。对于我的原始预训练模型,我从model.h5加载权重,并在应用prune_low_magnitude()之后调用model.summary(),模型中的任何方法都不能调用包含model.summary()方法。并显示错误,如AttributeError:'NoneType‘对象没有属性’汇总‘

代码语言:javascript
复制
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_magnitude()之后调用model.summary(),模型中的任何方法都不能调用包含model.summary()方法。并显示错误,如

AttributeError:'NoneType‘对象没有属性’汇总‘

EN

回答 1

Stack Overflow用户

发布于 2019-10-18 08:03:16

我希望这个答案仍然有帮助,但我最近遇到了同样的问题,即prune_low_magnitude()返回一个'None‘类型的对象。而且,new_pruned_model.compile()也不能工作。

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

对我来说,这是可行的:

(0)输入图书馆:

代码语言:javascript
复制
from tensorflow_model_optimization.python.core.api.sparsity import keras as sparsity
from tensorflow.python.keras.applications.<network_type> import <network_type>

(1)定义了预先训练的模型体系结构。

代码语言:javascript
复制
# define model architecture
loaded_model = <model_type>()
loaded_model.summary()

(2)编制了模型体系结构,并加载了预先训练的权重。

代码语言:javascript
复制
# compile model
opt = SGD(lr=learn_rate, momentum=momentum)
loaded_model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
loaded_model.load_weights('weight_file.h5')

(3)设置剪枝参数,分配剪枝计划。

代码语言:javascript
复制
# set pruning parameters
pruning_params = {
  'pruning_schedule': sparsity.PolynomialDecay(...)
}

# assign pruning schedule
model_pruned = sparsity.prune_low_magnitude(loaded_model, **pruning_params)

(4)编译模型和显示总结。

代码语言:javascript
复制
# 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_low_magnitude仍会返回一个类型为“None”的对象。

我使用PyCharm 2019.1.3 (x64)作为IDE。下面是引导我找到这个解决方案的链接:https://github.com/tensorflow/model-optimization/issues/12#issuecomment-526338458

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56391089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档