A
_copy_param_info_from should be invoked with two program, with represent the same topology
Angus07 发布于2020-02-04 14:27 浏览:373 回复:4
0
收藏
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条回复 最后由求爱求赞等着你回复于2020-05-19 11:48
#5求爱求赞等着你回复于2020-05-19 11:48:20

你可以这样写

# 定义预测的一个程序,这个是在主程序中获取的一个程序,专门用来做测试的,这个定义要放在定义方法之前,因为测试程序是训练程序的前半部分(不包括优化器和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
#4青春放纵流沙回复于2020-05-06 21:41:06

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

 

0
A
#3Angus07回复于2020-02-05 14:57:35

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

0
TOP
切换版块