gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:41:32 29 4
gpt4 key购买 nike

我有 keras 预训练模型(model.h5)。我想使用 Keras 使用基于 tensorflow Magnitude 的权重修剪来修剪该模型。一件奇怪的事情是我的预训练模型是用原始 keras 模型构建的 > 我的意思是这不是来自 tensorflow.keras。在 tensorflow Magnitude-based weight pruning with Keras 示例中,他们展示了如何使用 tensorflow.keras 模型。我想问的是,我可以使用他们的工具来修剪我原来的 keras 预训练模型吗?

在他们的权重修剪工具包中,有两种方法。一个是在训练时逐层修剪模型,第二个是修剪整个模型。我尝试了第二种方法来修剪整个预训练模型。下面是我的代码。
在他们的权重修剪工具包中,有两种方法。一个是在训练时逐层修剪模型,第二个是修剪整个模型。我尝试了第二种方法来修剪整个预训练模型。下面是我的代码。
对于我的原始预训练模型,我从 model.h5 加载权重,并且可以在应用 prune_low_magnitude() 之后调用 model.summary() 模型中的任何方法都不能调用,包括 model.summary() 方法。并显示类似 AttributeError: 'NoneType' object has no attribute 'summary' 的错误

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())

在他们的重量修剪工具包里面
enter link description here ,有两种方式。一个是在训练时逐层修剪模型,第二个是修剪整个模型。我尝试了第二种方法来修剪整个预训练模型。下面是我的代码。
对于我的原始预训练模型,我从 model.h5 加载权重,并且可以在应用 prune_low_magnitude() 之后调用 model.summary() 模型中的任何方法都不能调用,包括 model.summary() 方法。并显示错误

AttributeError: 'NoneType' object has no attribute 'summary'

最佳答案

我希望这个答案仍然有帮助,但我最近遇到了与 prune_low_magnitude() 相同的问题。返回一个“无”类型的对象。还有 new_pruned_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>

(1) 定义预训练模型架构
# define model architecture
loaded_model = <model_type>()
loaded_model.summary()

(2) 编译模型架构并加载预训练权重
# 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) 设置剪枝参数并分配剪枝时间表
# 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_low_magnitude 仍会返回类型为“None”的对象。 .

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

关于tensorflow - 我可以使用 tensorflow keras 模型优化工具包对 keras 预训练模型进行修剪吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56391089/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com