先挖个坑等着填DQN PolicyGradient

2024-06-02 14:38
文章标签 dqn 挖个 policygradient

本文主要是介绍先挖个坑等着填DQN PolicyGradient,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题

1.不能反向传播
2.计算出的loss用不用加和平均

import torch.nn as nn
import torch.nn.functional as F
import torch
import gym
import numpy as np
import torch.optim as optim
import random
import collections
from torch.distributions import Categoricalclass Policy(nn.Module):def __init__(self):super(Policy, self).__init__()self.l1 = nn.Linear(N_STATES, 32)self.l2 = nn.Linear(32, N_ACTIONS)def forward(self, x):out = self.l1(x)out = F.relu(out)out = self.l2(out)out = F.relu(out)return F.softmax(out, dim=-1)def calc_future_reward(reward_list):for i in range(len(reward_list)-2,-1,-1):reward_list[i] += gamma * reward_list[i+1]return reward_listenv = gym.make('CartPole-v0')
env = env.unwrapped
N_ACTIONS = env.action_space.n
N_STATES = env.observation_space.shape[0]
print(N_ACTIONS)
print(N_STATES)lr = 0.01
gamma = 0.9
greedy = 1
policy = Policy()
optimizer = optim.Adam(policy.parameters(), lr=1e-2)
print('\nCollecting experience...')
for i_episode in range(1):s = env.reset()step_cnt = 0episode = []a_list = []s_list = []r_list = []prob_list = []while True:step_cnt += 1env.render()prob = policy.forward(torch.FloatTensor(s))print(prob)prob_list.append(list(prob.data.numpy()))m = Categorical(prob)action = m.sample()a =  action.item()s_, r, done, _ = env.step(a)s_list.append(s)a_list.append(a)r_list.append(r)if done:s_tensor = torch.FloatTensor(s_list)a_tensor = torch.LongTensor(a_list).view(-1, 1)G_list = calc_future_reward(r_list)G_tensor = torch.FloatTensor(G_list).view(-1, 1)prob_tensor = torch.FloatTensor(prob_list)one_hot = torch.zeros(step_cnt, N_ACTIONS).scatter_(1, a_tensor, 1)loss = -1.0 * (prob_tensor.log() * one_hot).sum(dim=1).view(-1, 1) * G_tensoroptimizer.zero_grad()print(loss)mess_loss = torch.cat((loss)).sum()/step_cntmess_loss.backward()optimizer.step()breaks = s_

这篇关于先挖个坑等着填DQN PolicyGradient的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024251

相关文章

小琳AI课堂:DQN强化神经

大家好,这里是小琳AI课堂!今天我们来聊聊一个超级酷炫的算法——DQN(深度Q网络)!🤖 它可是深度学习和强化学习的完美结合,就像把两股超级英雄的力量合二为一,解决了那些高维输入空间的决策问题。这个算法是由DeepMind公司开发的,2015年一提出就震惊了整个AI界!🌟 先解释一下DQN是怎么工作的。🎨 DQN的基本原理: 强化学习背景:想象一下,有个小机器人(智能体)在一个充满挑战的环

【强化学习-Mode-Free DRL】深度强化学习如何选择合适的算法?DQN、DDPG、A3C等经典算法Mode-Free DRL算法的四个核心改进方向

【强化学习-DRL】深度强化学习如何选择合适的算法? 引言:本文第一节先对DRL的脉络进行简要介绍,引出Mode-Free DRL。第二节对Mode-Free DRL的两种分类进行简要介绍,并对三种经典的DQL算法给出其交叉分类情况;第三节对Mode-Free DRL的四个核心(改进方向)进行说明。第四节对DQN的四个核心进行介绍。 DRL的发展脉络 DRL沿着Mode-Based和Mode

深度强化学习开端——DQN算法求解车杆游戏

深度强化学习开端——DQN算法求解车杆游戏 DQN,即深度Q网络(Deep Q-Network),是一种结合了深度学习和强化学习的算法,其主要用于解决序列决策问题,并且在许多复杂的决策任务中展现出了显著的效果。DQN算法的发明历史可以追溯到2013年,当时DeepMind团队首次提出了一种名为DQN(Deep Q-Network)的新型强化学习算法。这一算法标志着深度学习和强化学习成功结合的开始

论文结果难复现?本文教你完美实现深度强化学习算法DQN

选自arXiv 作者:Melrose Roderick等 机器之心编译 论文的复现一直是很多研究者和开发者关注的重点,近日有研究者详细论述了他们在复现深度 Q 网络所踩过的坑与训练技巧。本论文不仅重点标注了实现过程中的终止条件和优化算法等关键点,同时还讨论了实现的性能改进方案。机器之心简要介绍了该论文,更详细的实现细节请查看原论文。 过去几年来,深度强化学习逐渐流

深度学习十大算法之深度Q网络(DQN)

一、简介 深度Q网络(DQN)是一种结合了深度学习和强化学习的算法,它在近年来成为了人工智能领域的一个热点。DQN首次被引入是在2013年,由DeepMind的研究人员开发。它标志着深度学习技术在解决高维度决策问题上的一大突破。 DQN的定义 DQN是一种算法,它使用深度神经网络来逼近最优的Q函数。在传统的Q学习中,Q函数用于估计在给定状态下采取特定动作的期望回报。DQN通过训练神经网络来学

self-attention mechanism DQN 算法和DQN算法的区别在哪

self-attention mechanism DQN 算法与标准的 DQN 算法之间的主要区别在于其在网络结构中引入了自注意力机制(self-attention mechanism)。下面是两者之间的主要区别: 网络结构: 标准的 DQN 通常使用深度神经网络(如卷积神经网络或全连接神经网络)来近似状态动作值函数(Q 函数)。这些网络结构主要由卷积层或全连接层组成,用于从状态中提取特征,并

强化学习与Deep Q-Network(DQN)

什么是强化学习?难点是甚么? 1.有监督?无监督?是有稀疏并延时的标签---奖励(reword) 2.信用分配问题,得分可能跟你现在的行为没有直接的关系(不好表述) 3.对于现有得分,搜索/不搜索 ps:强化学习就是一个不断学习来提升自己的一个模型,当前的决策由现在或者未来决定的。 ps:滴滴的司机派单,阿尔法狗的棋谱学习,都有强化学习的影子。   马尔可夫决策过程 模型: 有限序

pytorch强化学习(2)——重写DQN

思路 在q-learning当中,Q函数的输入是状态state和action,输出是q-value。 而DQN就是使用神经网络来拟合Q函数,所以从直观上来说,我觉得神经网络的输入应该是状态state和action,输出应该是q-value。 但是,网上绝大多数DQN的代码实现都把state作为网络输入,把所有action的q-value的组合作为网络输出。我觉得这是不直观的、令人费解的,于是

DQN+Active Learning

关于MarkDown公式详细编辑可以参考博客 Initialize replay memory M M M to capacity NNN Initialize action-value function Q Q Q with random weights for episode = 1,2,...,N1,2,...,N1, 2,...,N do      Dl D l

Double-DQN算法

Double-DQN算法的原理简介、与DQN对比等。 参考深度Q网络进阶技巧 1. 原理简介 在DQN算法中,虽然有target_net和eval_net,但还是容易出现Q值高估的情况,原因在于训练时用通过target_net选取最优动作 a ⋆ = argmax ⁡ a Q ( s t + 1 , a ; w − ) a^{\star}=\underset{a}{\operatorname