返回介绍

parl.algorithms.paddle.policy_gradient

发布于 2024-06-23 17:58:49 字数 2641 浏览 0 评论 0 收藏 0

parl.algorithms.paddle.policy_gradient 源代码

#   Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import parl
import paddle
from paddle.distribution import Categorical
from parl.utils.utils import check_model_method

__all__ = ['PolicyGradient']


[文档]class PolicyGradient(parl.Algorithm):
[文档]    def __init__(self, model, lr):
        """Policy gradient algorithm

        Args:
            model (parl.Model): model defining forward network of policy.
            lr (float): learning rate.

        """
        # checks
        check_model_method(model, 'forward', self.__class__.__name__)
        assert isinstance(lr, float)

        self.model = model
        self.optimizer = paddle.optimizer.Adam(
            learning_rate=lr, parameters=self.model.parameters())

[文档]    def predict(self, obs):
        """Predict the probability of actions

        Args:
            obs (paddle tensor): shape of (obs_dim,)

        Returns:
            prob (paddle tensor): shape of (action_dim,)
        """
        prob = self.model(obs)
        return prob

[文档]    def learn(self, obs, action, reward):
        """Update model with policy gradient algorithm

        Args:
            obs (paddle tensor): shape of (batch_size, obs_dim)
            action (paddle tensor): shape of (batch_size, 1)
            reward (paddle tensor): shape of (batch_size, 1)

        Returns:
            loss (paddle tensor): shape of (1)

        """
        prob = self.model(obs)
        log_prob = Categorical(prob).log_prob(action)
        loss = paddle.mean(-1 * log_prob * reward)

        self.optimizer.clear_grad()
        loss.backward()
        self.optimizer.step()
        return loss

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文