同步操作将从 PaddlePaddle/Paddle 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# Copyright (c) 2022 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.from paddle.distribution import distributionclass Independent(distribution.Distribution):r"""Reinterprets some of the batch dimensions of a distribution as event dimensions.This is mainly useful for changing the shape of the result of:meth:`log_prob`.Args:base (Distribution): The base distribution.reinterpreted_batch_rank (int): The number of batch dimensions toreinterpret as event dimensions.Examples:.. code-block:: pythonimport paddlefrom paddle.distribution import independentbeta = paddle.distribution.Beta(paddle.to_tensor([0.5, 0.5]), paddle.to_tensor([0.5, 0.5]))print(beta.batch_shape, beta.event_shape)# (2,) ()print(beta.log_prob(paddle.to_tensor(0.2)))# Tensor(shape=[2], dtype=float32, place=Place(gpu:0), stop_gradient=True,# [-0.22843921, -0.22843921])reinterpreted_beta = independent.Independent(beta, 1)print(reinterpreted_beta.batch_shape, reinterpreted_beta.event_shape)# () (2,)print(reinterpreted_beta.log_prob(paddle.to_tensor([0.2, 0.2])))# Tensor(shape=[1], dtype=float32, place=Place(gpu:0), stop_gradient=True,# [-0.45687842])"""def __init__(self, base, reinterpreted_batch_rank):if not isinstance(base, distribution.Distribution):raise TypeError(f"Expected type of 'base' is Distribution, but got {type(base)}")if not (0 < reinterpreted_batch_rank <= len(base.batch_shape)):raise ValueError(f"Expected 0 < reinterpreted_batch_rank <= {len(base.batch_shape)}, but got {reinterpreted_batch_rank}")self._base = baseself._reinterpreted_batch_rank = reinterpreted_batch_rankshape = base.batch_shape + base.event_shapesuper(Independent, self).__init__(batch_shape=shape[:len(base.batch_shape) -reinterpreted_batch_rank],event_shape=shape[len(base.batch_shape) -reinterpreted_batch_rank:])@propertydef mean(self):return self._base.mean@propertydef variance(self):return self._base.variancedef sample(self, shape=()):return self._base.sample(shape)def log_prob(self, value):return self._sum_rightmost(self._base.log_prob(value), self._reinterpreted_batch_rank)def prob(self, value):return self.log_prob(value).exp()def entropy(self):return self._sum_rightmost(self._base.entropy(),self._reinterpreted_batch_rank)def _sum_rightmost(self, value, n):return value.sum(list(range(-n, 0))) if n > 0 else value
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。