我有角星预训练模型(model.h5)。我想用tensorflow基于量值的模型,用Keras剪枝。一个奇怪的事情是,我的预先训练过的模型是用原始的keras模型构建的,我的意思是它不是来自tensorflow.keras的。在tensorflow基于量值的权值剪枝与Keras示例中,他们展示了如何处理tensorflow.keras模型.我想问的是,我能用他们的工具修剪我原来的角粒预训练模型吗?
在他们的重量修剪工具包中,有两种方法。一种是在训练过程中逐层修剪模型,二是对整个模型进行剪枝。我尝试了第二种方法来修剪整个预先训练过的模型。下面是我的密码。在他们的重量修剪工具包中,有两种方法。一种是在训练过程中逐层修剪模型,二是对整个模型进行剪枝。我尝试了第二种方法来修剪整个预先训练过的模型。下面是我的密码。对于我的原始预训练模型,我从model.h5加载权重,并在应用prune_low_magnitude()之后调用model.summary(),模型中的任何方法都不能调用包含model.summary()方法。并显示错误,如AttributeError:'NoneType‘对象没有属性’汇总‘
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‘对象没有属性’汇总‘
发布于 2019-10-18 08:03:16
我希望这个答案仍然有帮助,但我最近遇到了同样的问题,即prune_low_magnitude()返回一个'None‘类型的对象。而且,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
https://stackoverflow.com/questions/56391089
复制相似问题