首页 Paddle框架 帖子详情
var not in this block
收藏
快速回复
Paddle框架 问答深度学习模型训练 825 4
var not in this block
收藏
快速回复
Paddle框架 问答深度学习模型训练 825 4

请问以下代码可以怎么实现循环输入隐含层状态,我试了很多方法都说找不到变量

训练

USE_CUDA = True
place = fluid.CUDAPlace(0) if USE_CUDA else fluid.CPUPlace()
exe = fluid.Executor(place)

data = fluid.data(name='poetry', shape=[BATCH_SIZE, 124], dtype='int64', lod_level=1)
label = fluid.data(name='label', shape=[-1, 1], dtype='int64')
hid1 = fluid.data(name='H2L', shape=[NUM_LAYERS, BATCH_SIZE, HIDDEN_DIM], dtype='float32')
hid2 = fluid.data(name='C2L', shape=[NUM_LAYERS, BATCH_SIZE, HIDDEN_DIM], dtype='float32')

data = fluid.embedding(data, size=[DICT_SIZE, EMBD_SIZE], is_sparse=True)
if IS_INFER == 0 or sum(sum(hid1)) == 0:
    h = fluid.layers.fill_constant([NUM_LAYERS, BATCH_SIZE, HIDDEN_DIM], 'float32', 0.0 )
    c = fluid.layers.fill_constant([NUM_LAYERS, BATCH_SIZE, HIDDEN_DIM], 'float32', 0.0 )
else:
    h, c = hid1, hid2
output, h, c = fluid.layers.lstm(data, h, c, max_len=125, hidden_size=HIDDEN_DIM, num_layers=NUM_LAYERS)
output = fluid.layers.reshape(output, [BATCH_SIZE*SEQ_SIZE, -1])
prediction = fluid.layers.fc(output, DICT_SIZE, act='softmax')

loss = fluid.layers.cross_entropy(prediction, label)
avg_loss = fluid.layers.mean(loss)
opt = fluid.optimizer.Adam(learning_rate=0.002)
opt.minimize(avg_loss)

保存推测模型

fluid.io.save_inference_model(params_dirname,  ['poetry', 'H2L', 'C2L'], [prediction, h, c], exe)

报错

Traceback (most recent call last) in
1 main_program = fluid.default_main_program()
2 with fluid.program_guard(main_program):
----> 3 train(main_program)
in train(main_program)
4 exe.run(fluid.default_startup_program())
5 # 数据填充器
----> 6 feed_var_list_loop = [main_program.global_block().var(var_name) for var_name in feed_order]
7 feeder = fluid.DataFeeder(feed_list=feed_var_list_loop, place=place)
8 # 读取数据
in (.0)
4 exe.run(fluid.default_startup_program())
5 # 数据填充器
----> 6 feed_var_list_loop = [main_program.global_block().var(var_name) for var_name in feed_order]
7 feeder = fluid.DataFeeder(feed_list=feed_var_list_loop, place=place)
8 # 读取数据
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py in var(self, name)
2375 v = self.vars.get(name, None)
2376 if v is None:
-> 2377 raise ValueError("var %s not in this block" % name)
2378 return v
2379
ValueError: var hid1 not in this block

 

0
收藏
回复
全部评论(4)
时间顺序
HolliZhao
#2 回复于2020-06

是不是数据没读进去呀.

0
回复
thinc
#3 回复于2020-06

你的run在哪里呢

0
回复
thinc
#4 回复于2020-06
thinc #3
你的run在哪里呢

还有个问题

if IS_INFER == 0 or sum(sum(hid1)) == 0:

我不知道你这个sum是自己写的函数还是用的系统函数,因为静态图中的数据类型不是我们平时接触的,所以计算可能会出问题。

但这个和报错关系不大,只是个建议

0
回复
阿斯顿aaC
#5 回复于2020-06

对个别变量需要增加global

可以参考https://aistudio.baidu.com/aistudio/projectdetail/189715

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