国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

PyTorch 概率分布-torch分布

2025-06-25 14:56 更新

一、PyTorch 概率分布概述

PyTorchtorch.distributions 包提供了豐富的概率分布類和采樣函數(shù),可用于構(gòu)建隨機計算圖和實現(xiàn)隨機梯度估計器。以下是常用分布及其關鍵方法的介紹。

(一)常用分布類

  1. 正態(tài)分布(Normal)
    • 可通過均值(loc)和標準差(scale)參數(shù)化。
    • 提供 sample()rsample() 、log_prob() 等方法,分別用于采樣、可微采樣和計算對數(shù)概率密度。

  1. 伯努利分布(Bernoulli)
    • 由成功概率(probs)或?qū)?shù)幾率(logits)參數(shù)化。
    • 常用于二分類問題中的隨機采樣。

  1. 均勻分布(Uniform)
    • 在指定區(qū)間 [low, high) 內(nèi)生成均勻分布的隨機樣本。

  1. 分類分布(Categorical)
    • 適用于多分類問題,可基于類別概率(probs)或?qū)?shù)幾率(logits)進行采樣。

(二)關鍵方法

  1. sample() :從分布中生成隨機樣本。
  2. rsample() :生成可微樣本,利用重參數(shù)化技巧實現(xiàn)梯度回傳。
  3. log_prob(value) :計算給定值的對數(shù)概率密度或質(zhì)量。
  4. entropy() :計算分布的熵。

二、實際案例:強化學習中的策略梯度

假設我們正在開發(fā)一個強化學習模型,用于在模擬環(huán)境中訓練智能體。我們將利用 PyTorch 的概率分布實現(xiàn)策略梯度方法。

import torch
import torch.distributions as td


## 定義一個簡單的策略網(wǎng)絡
class PolicyNetwork(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(PolicyNetwork, self).__init__()
        self.fc = nn.Linear(input_dim, output_dim)


    def forward(self, x):
        return torch.softmax(self.fc(x), dim=-1)


## 初始化策略網(wǎng)絡
policy_net = PolicyNetwork(input_dim=4, output_dim=2)


## 模擬環(huán)境狀態(tài)
state = torch.tensor([0.1, 0.2, 0.3, 0.4])


## 使用策略網(wǎng)絡輸出動作概率
probs = policy_net(state)


## 創(chuàng)建分類分布
m = td.Categorical(probs=probs)


## 采樣動作
action = m.sample()


## 計算動作的對數(shù)概率
log_prob = m.log_prob(action)


## 假設獲得獎勵
reward = torch.tensor(1.0)


## 計算損失并反向傳播
loss = -log_prob * reward
loss.backward()

三、實際案例:變分自編碼器中的重參數(shù)化

在變分自編碼器(VAE)中,我們利用重參數(shù)化技巧實現(xiàn)路徑導數(shù)估計器。

import torch
import torch.distributions as td


## 定義一個簡單的變分自編碼器
class VAE(nn.Module):
    def __init__(self, input_dim, latent_dim):
        super(VAE, self).__init__()
        self.encoder = nn.Linear(input_dim, latent_dim * 2)
        self.decoder = nn.Linear(latent_dim, input_dim)


    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5 * logvar)
        eps = torch.randn_like(std)
        return mu + eps * std


    def forward(self, x):
        mu, logvar = torch.chunk(self.encoder(x), 2, dim=-1)
        z = self.reparameterize(mu, logvar)
        reconstructed = self.decoder(z)
        return reconstructed, mu, logvar


## 初始化 VAE
vae = VAE(input_dim=784, latent_dim=20)


## 輸入數(shù)據(jù)
x = torch.randn(1, 784)


## 前向傳播
reconstructed, mu, logvar = vae(x)


## 定義損失函數(shù)
def vae_loss(reconstructed, x, mu, logvar):
    reconstruction_loss = nn.MSELoss()(reconstructed, x)
    kl_divergence = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
    return reconstruction_loss + kl_divergence


## 計算損失
loss = vae_loss(reconstructed, x, mu, logvar)
loss.backward()

四、總結(jié)

本教程為零基礎的初學者詳細講解了 PyTorch 中的概率分布,包括常用分布及其關鍵方法。通過實際案例,展示了如何在強化學習和變分自編碼器中應用這些分布。希望讀者能通過這些知識,充分利用 PyTorch 的概率分布功能,加速深度學習項目。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號