state = self.env_wrapper.normalise_state(state) ValueError: Cannot feed value of shape (1,) for Tensor 'Placeholder_6:0', which has shape '(?, 2)'
时间: 2024-04-07 20:30:41 浏览: 20
这个错误通常是由于你正在尝试将一个形状不匹配的Tensor传递给一个需要特定形状的Tensor的操作中。在你的情况下,你正在尝试将一个形状为(1,)的Tensor传递给一个形状为(?, 2)的Placeholder Tensor中。
为了解决这个问题,你需要检查一下你的代码,确保你正在使用正确形状的Tensor。你可以尝试调整你的代码,以便你的Tensor具有正确的形状,或者你可以在需要传递Tensor的函数中调整参数的形状,使其匹配Tensor的形状。
此外,你可能需要检查一下你的环境包装器(normalise_state)是否正确地处理了状态(state)的形状。也许它需要将状态(state)转换为一个形状为(?, 2)的数组,以便它可以与Placeholder Tensor匹配。
如果你还有问题,可以将更多的代码和错误信息共享给我,这样我就可以更好地帮助你解决问题。
相关问题
while not stop_agent_event.is_set(): num_eps += 1 # Reset environment and experience buffer state = self.env_wrapper.reset() state = self.env_wrapper.normalise_state(state) self.exp_buffer.clear() num_steps = 0 episode_reward = 0 ep_done = False
这段代码是一个循环,用于执行agent在环境中外界交互的过程。具体来说,它会不断进行以下几个步骤:
1. 增加当前episode数的计数器(num_eps);
2. 重置环境状态和经验缓存(exp_buffer);
3. 对环境状态进行归一化处理(normalise_state);
4. 重置当前episode的步数计数器(num_steps)、回报计数器(episode_reward)和结束标志(ep_done);
5. 进入循环体,执行agent与环境的交互过程,直到本episode结束或者外部事件触发终止。
这段代码是强化学习中常见的基本循环体结构,用于训练agent从环境中学习最优策略。
while not ep_done: num_steps += 1 if train_params.RENDER: self.env_wrapper.render() action = self.sess.run(self.actor_net.output, {self.state_ph:np.expand_dims(state, 0)})[0] # Add batch dimension to single state input, and remove batch dimension from single action output action += (gaussian_noise() * train_params.NOISE_DECAY**num_eps) next_state, reward, terminal = self.env_wrapper.step(action) episode_reward += reward next_state = self.env_wrapper.normalise_state(next_state) reward = self.env_wrapper.normalise_reward(reward) self.exp_buffer.append((state, action, reward)) if len(self.exp_buffer) >= train_params.N_STEP_RETURNS: state_0, action_0, reward_0 = self.exp_buffer.popleft() discounted_reward = reward_0 gamma = train_params.DISCOUNT_RATE for (_, _, r_i) in self.exp_buffer: discounted_reward += r_i * gamma gamma *= train_params.DISCOUNT_RATE run_agent_event.wait() PER_memory.add(state_0, action_0, discounted_reward, next_state, terminal, gamma) state = next_state
这段代码是主循环中的一部分,其中包含了执行动作、观察环境、更新经验缓存等操作。具体来说,算法执行以下步骤:
1. 累计步数;
2. 如果需要渲染环境,则渲染环境;
3. 使用Actor网络计算当前状态的动作;
4. 对动作添加高斯噪声;
5. 执行动作并观察新状态和奖励;
6. 累计回报;
7. 对新状态进行归一化处理;
8. 对奖励进行归一化处理;
9. 将经验添加到经验缓存中;
10. 如果经验缓存已满,则计算N步回报,并将经验添加到优先经验回放缓存中;
11. 更新状态。
在这个过程中,Actor网络用于计算当前状态下的动作,而高斯噪声则用于增加探索性,以便算法能够更好地探索环境。在执行动作之后,算法会观察新状态和奖励,并将它们添加到经验缓存中。如果经验缓存已满,算法会计算N步回报,并将经验添加到优先经验回放缓存中。最后,算法会更新状态并继续执行主循环。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)