首页 Paddle框架 帖子详情
_copy_param_info_from should be invoked with two program, with represent the same topology
收藏
快速回复
Paddle框架 问答深度学习 1888 4
_copy_param_info_from should be invoked with two program, with represent the same topology
收藏
快速回复
Paddle框架 问答深度学习 1888 4
train_prog = fluid.default_main_program()
startup_prog = fluid.default_startup_program()
with fluid.program_guard(train_prog, startup_prog):
    with fluid.unique_name.guard():
        lm = LanguageModel(config, config.vocab_size)
        src = layers.data(name="src",
                          shape=[-1, config.max_input_length + 2, 1],
                          dtype='int64')

        label = layers.data(name="label", shape=[-1, 1], dtype='int64')

        embedded = lm.embeder(src)
        y = fluid.layers.cast(label, dtype='float32')
        init_hidden = fluid.layers.expand(x=y, expand_times=[1, 700])
        out1, out2 = lm.net(embedded, init_hidden=init_hidden)
        forward_target = src[:, 1:, :]
        forward_target.stop_gradient = True
        backward_target = src[:, 1:, :]
        backward_target.stop_gradient = True
        loss = lm.loss(out1, out2, forward_target, backward_target, config.max_input_length + 2)
        lm.optmize(loss)
        reader = fluid.io.PyReader(feed_list=[src, label],
                                   capacity=20,
                                   iterable=True,
                                   return_list=True)
        eval_reader = fluid.io.PyReader(feed_list=[src, label],
                                        capacity=20,
                                        iterable=True,
                                        return_list=True)
infer_program = train_prog.clone(for_test=True)
exe.run(startup_prog)

============
代码如上,提示在infer_program = train_prog.clone(for_test=True)这句报错了,错误信息如标题。
我看了一下模型库的例子,好像结构是类似的,为什么会报这个错误呢?用法上有问题吗?

0
收藏
回复
全部评论(4)
时间顺序
AIStudio786501
#3 回复于2020-02

发现了,是因为剪裁的原因,优化函数要在后面加,已解决

0
回复
青春放纵流沙
#4 回复于2020-05

可以把修改后的代码分享一下嘛?

 

0
回复
求爱求赞等着你
#5 回复于2020-05

你可以这样写

# 定义预测的一个程序,这个是在主程序中获取的一个程序,专门用来做测试的,这个定义要放在定义方法之前,因为测试程序是训练程序的前半部分(不包括优化器和backward),所以要定义在优化方法之前。
    test_program = fluid.default_main_program().clone(for_test=True) # for_test=True,表示测试过程中使用训练模型中的BN

    # Initialize optimizer
    optimizer = optimizer_setting(args, params)
    optimizer.minimize(loss)

    place = fluid.CUDAPlace(0) if args.use_gpu else fluid.CPUPlace()
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program())

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户