首页 炼丹房 帖子详情
参数未初始化为什么偏偏找上我?还是全网独此一份?
收藏
快速回复
炼丹房 问答新手上路 1105 9
参数未初始化为什么偏偏找上我?还是全网独此一份?
收藏
快速回复
炼丹房 问答新手上路 1105 9

全网独此一份?难道没有其他的人报错 is not initialized这个问题吗。用静态图写代码经常会报错 is not initialized。

0
收藏
回复
全部评论(9)
时间顺序
kj7541
#2 回复于2020-08
import numpy as np
import paddle.fluid as fluid
import gym


class Critic(object):
    def __init__(self, exe, gamma, state_dim, lr):
        # self.exe = fluid.Executor(fluid.CPUPlace())
        self.exe = exe
        self.state_dim = state_dim
        self.gamma = gamma
        self.lr = lr
        self._built_net()

    def _built_net(self):
        self.critic_program = fluid.Program()
        with fluid.program_guard(self.critic_program):
            state = fluid.data(name='state', shape=[None, self.state_dim], dtype='float32')
            reward = fluid.data(name='reward', shape=[None, 1], dtype='float32')
            next_reward = fluid.data(name='next_reward', shape=[None, 1], dtype='float32')
            # 创建网络
            h1 = fluid.layers.fc(input=state, size=24, act='relu')
            self.value = fluid.layers.fc(input=h1, size=1)
            self.td_error = reward + self.gamma * next_reward - self.value
            cost = fluid.layers.reduce_mean(fluid.layers.square(self.td_error))

            self.critic_program_test = self.critic_program.clone(for_test=True)
            fluid.optimizer.AdamOptimizer(learning_rate=self.lr).minimize(cost)

    def train(self, state, reward, next_state):
        next_reward = self.exe.run(self.critic_program_test,
                                   feed={'state': next_state},
                                   fetch_list=[self.value])[0]
        print(next_reward.shape)
        td_error = self.exe.run(self.critic_program,
                                feed={'state': state,
                                      'reward': reward,
                                      'next_reward': next_reward},
                                fetch_list=[self.td_error])[0]


exe = fluid.Executor(fluid.CPUPlace())
env = gym.make('CartPole-v1')
critic = Critic(exe, gamma=0.9, state_dim=4, lr=0.005)
exe.run(fluid.default_startup_program())

state = env.reset()
next_state, reward, done, info = env.step(0)


def dat(data):
    return np.expand_dims(data, axis=0).astype(np.float32)


critic.train(dat(state), dat(reward), dat(next_state))



































0
回复
kj7541
#3 回复于2020-08

有没有大神帮忙看一下。为什么会出现这种错误呢。

0
回复
kj7541
#4 回复于2020-08

很好奇都没人碰到这种问题吗?还是大家都是用动态图写的?或者碰到这种问题的人被paddle劝退了?

0
回复
AIStudio810260
#5 回复于2020-08

paddlepaddle版本换到1.6.3试试

0
回复
我很小很纯洁
#6 回复于2020-09

楼主解决这个问题了么....我也碰上参数未初始化了,欲哭无泪

0
回复
不败小段哥
#7 回复于2020-09

看起来代码好像没什么问题

0
回复
kj7541
#8 回复于2020-09
楼主解决这个问题了么....我也碰上参数未初始化了,欲哭无泪

这个要手动调整你喂数据给网络的顺序,感觉有点蛋疼。

推荐使用动态图,静态图做强化学习我已经放弃了,强化学习你绕不过两个算法DQN, DDPG。

 

0
回复
kj7541
#9 回复于2020-09
paddlepaddle版本换到1.6.3试试

好像无关paddle的版本的问题。这个是paddle内部的一个机制。paddle静态图用起来真的要万分小心。

0
回复
UnseenMe
#10 回复于2020-09

没有遇到过。

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户