paddlepaddle强化学习作业

import gym, os
from itertools import count
import paddle
import paddle.nn as nn
import paddle.optimizer as optim
import paddle.nn.functional as F
from paddle.distribution import Categorical

device = paddle.get_device()
env = gym.make("CartPole-v0")  ### 或者 env = gym.make("CartPole-v0").unwrapped 开启无锁定环境训练

state_size = env.observation_space.shape[0]
action_size = env.action_space.n
lr = 0.001

class Actor(nn.Layer):
    def __init__(self, state_size, action_size):
        super(Actor, self).__init__()
        self.state_size = state_size
        self.action_size = action_size
        self.linear1 = nn.Linear(self.state_size, 128)
        self.linear2 = nn.Linear(128, 256)
        self.linear3 = nn.Linear(256, self.action_size)

    def forward(self, state):
        output = F.relu(self.linear1(state))
        output = F.relu(self.linear2(output))
        output = self.linear3(output)
        distribution = Categorical(F.softmax(output, axis=-1))
        return distribution


class Critic(nn.Layer):
    def __init__(self, state_size, action_size):
        super(Critic, self).__init__()
        self.state_size = state_size
        self.action_size = action_size
        self.linear1 = nn.Linear(self.state_size, 128)
        self.linear2 = nn.Linear(128, 256)
        self.linear3 = nn.Linear(256, 1)

    def forward(self, state):
        output = F.relu(self.linear1(state))
        output = F.relu(self.linear2(output))
        value = self.linear3(output)
        return value
def compute_returns(next_value, rewards, masks, gamma=0.99):
    R = next_value
    returns = []
    for step in reversed(range(len(rewards))):
        R = rewards[step] + gamma * R * masks[step]
        returns.insert(0, R)
    return returns


def trainIters(actor, critic, n_iters):
    optimizerA = optim.Adam(lr, parameters=actor.parameters())
    optimizerC = optim.Adam(lr, parameters=critic.parameters())
    for iter in range(n_iters):
        state = env.reset()
        log_probs = []
        values = []
        rewards = []
        masks = []
        entropy = 0
        env.reset()

        for i in count():
            # env.render()
            state = paddle.to_tensor(state,dtype="float32",place=device)
            dist, value = actor(state), critic(state)

            action = dist.sample([1])
            next_state, reward, done, _ = env.step(action.cpu().squeeze(0).numpy()) 

            log_prob = dist.log_prob(action);
            # entropy += dist.entropy().mean()

            log_probs.append(log_prob)
            values.append(value)
            rewards.append(paddle.to_tensor([reward], dtype="float32", place=device))
            masks.append(paddle.to_tensor([1-done], dtype="float32", place=device))

            state = next_state

            if done:
                if iter % 10 == 0:
                    print('Iteration: {}, Score: {}'.format(iter, i))
                break


        next_state = paddle.to_tensor(next_state, dtype="float32", place=device)
        next_value = critic(next_state)
        returns = compute_returns(next_value, rewards, masks)

        log_probs = paddle.concat(log_probs)
        returns = paddle.concat(returns).detach()
        values = paddle.concat(values)

        advantage = returns - values

        actor_loss = -(log_probs * advantage.detach()).mean()
        critic_loss = advantage.pow(2).mean()

        optimizerA.clear_grad()
        optimizerC.clear_grad()
        actor_loss.backward()
        critic_loss.backward()
        optimizerA.step()
        optimizerC.step()
    paddle.save(actor.state_dict(), 'model/actor.pdparams')
    paddle.save(critic.state_dict(), 'model/critic.pdparams')
    env.close()



if __name__ == '__main__':
    if os.path.exists('model/actor.pdparams'):
        actor = Actor(state_size, action_size)
        model_state_dict  = paddle.load('model/actor.pdparams')
        actor.set_state_dict(model_state_dict )
        print('Actor Model loaded')
    else:
        actor = Actor(state_size, action_size)
    if os.path.exists('model/critic.pdparams'):
        critic = Critic(state_size, action_size)
        model_state_dict  = paddle.load('model/critic.pdparams')
        critic.set_state_dict(model_state_dict )
        print('Critic Model loaded')
    else:
        critic = Critic(state_size, action_size)
    trainIters(actor, critic, n_iters=201)

运行截图 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PaddlePaddle是一个开源的深度学习框架,由百度公司开发。它支持多种深度学习算法,包括卷积神经网络、循环神经网络、生成对抗网络等。PaddlePaddle还提供了丰富的工具和库,方便用户进行模型训练、优化和部署。同时,PaddlePaddle也支持分布式训练和推理,可以在多个GPU或者多台机器上进行加速。PaddlePaddle的特点是易于使用、高效、灵活和可扩展。它已经被广泛应用于图像识别、自然语言处理、语音识别等领域。 ### 回答2: paddlepaddle深度学习框架,是一个基于飞桨算法平台的开源机器学习框架。它由百度团队推出,主要用于处理基于深度学习的大规模数据训练和推理。其突出的特点是易用、高效、灵活和可扩展性强。 易用性是它的最大特点之一,它提供了丰富的API和预设模型,让使用者轻松快速地搭建、训练和测试自己的模型。其中,高层API提供了全套的神经网络层及应用领域,可以轻松地实现高质量的模型,并且支持多种开发语言,包括Python、C++和JAVA,以满足各种使用场景。 高效性是paddlepaddle的另一个优点,它采用异步计算和分布式计算策略,可以支持千万级参数的训练,并且具有高精度的计算性能,提供了数以千计的计算节点,可以满足不同规模的训练需求。 灵活性是它的另一大特点,除了提供丰富的预设模型之外,它还支持用户自定义模型,用户可以根据自己的需求,自由设置模型的架构和超参数,从而实现更加高效的训练。 可扩展性是paddlepaddle的重点之一,它提供了大量的扩展接口,让使用者可以自由地添加新的算子和数据类型,以满足不同领域的应用需求。此外,它还提供了分布式框架,可以轻松地实现GPU和CPU的分布式训练,支持多节点的分布式训练。 总之,paddlepaddle是一个成熟、高效、灵活和可扩展性强的深度学习框架,可以有效帮助开发者加速模型开发和部署,以满足不同领域的需求。 ### 回答3: PaddlePaddle是一个开源深度学习框架,面向产业应用的深度学习平台,已经被广泛应用在机器翻译、图像分类、股票预测等领域。以下是我对PaddlePaddle深度学习框架的理解: 1. 开源性:PaddlePaddle是一个开源的深度学习框架,任何人都可以通过GitHub获取源代码并进行二次开发。作为一款开源框架,它具备的优势在于可以得到全球开发者的支持和贡献,吸引人才,不断优化和完善。 2. 易用性:PaddlePaddle采用了易用性较好的Python语言作为基础,能够快速地搭建深度学习的模型。同时,PaddlePaddle还提供了许多高级API供使用者调用,例如自定义损失函数、预处理图像等工具,减少了编写代码的难度。 3. 命令式编程范式:PaddlePaddle采用命令式编程范式,让用户可以即时得到完整的结果。可以快速查看到代码的运行结果,更加方便和快速定位问题。 4. 基于飞桨开发:PaddlePaddle是由百度开发,基于飞桨开发的深度学习框架,拥有强大的计算能力和优秀的性能优化,既可以在CPU上运行,又可以在GPU和NPU上高效运行。 5. 支持云端部署:PaddlePaddle支持在云端进行深度学习的训练和部署,使得对于生产环境的大规模训练和推理变得更加简单高效。 总之,PaddlePaddle是一款非常成熟的深度学习框架,既容易学习和上手,又具备较高的性能和拓展性,尤其适合用于产业应用领域,为其提供技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值