加载通道裁剪后的模型,再进行蒸馏报错
Created by: zhizunbao-y
student_program = fluid.Program()
s_startup = fluid.Program()
with fluid.program_guard(student_program, s_startup):
with fluid.unique_name.guard():
# model definition
...
place = fluid.CUDAPlace(0) if args.use_gpu else fluid.CPUPlace()
exe = fluid.Executor(place)
load_model(exe, student_program, args.pretrained_model) #prune.io
val_program = student_program.clone(for_test=True)
teacher_model = models.__dict__[args.teacher_model]()
teacher_program = fluid.Program()
t_startup = fluid.Program()
with fluid.program_guard(teacher_program, t_startup):
with fluid.unique_name.guard():
# teacher model definition
...
exe.run(t_startup)
if args.teacher_pretrained_model:
def if_exist(var):
return os.path.exists(
os.path.join(args.teacher_pretrained_model, var.name))
fluid.io.load_vars(
exe,
args.teacher_pretrained_model,
main_program=teacher_program,
predicate=if_exist)
data_name_map = {'images': 'images'}
merge(teacher_program, student_program, data_name_map, place)
with fluid.program_guard(student_program, s_startup):
dist_loss = soft_label_loss("teacher_fc_0.tmp_0", "fc_0.tmp_0", student_program)
loss = avg_cost + dist_loss
lr, opt = create_optimizer(args)
opt.minimize(loss)
exe.run(s_startup)
会报以下错误:
Error: Param and Velocity of MomentumOp should have the same dimension.
[Hint: Expected param_dim == ctx->GetInputDim("Velocity"), but received param_dim:256 != ctx->GetInputDim("Velocity"):128.] at (/paddle/paddle/fluid/operators/optimizers/momentum_op.h:79)
[operator < momentum > error]
怀疑是exe.run(s_startup)这句代码覆盖了load_model ,但是optimizer又需要初始化,请问如何解决?