我可以用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的错误:“非类型”对象没有属性“摘要”我可以用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预训练模型吗 在他们的体重修剪工具包中,有两种方法。一种是在训练过程中对模型进行分层剪枝,另一种是对
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()