【Python】torch.exp()和 torch.sigmoid()函数详解和示例

本文对torch.exp()和 torch.sigmoid()函数进行原理和示例讲解,以帮助大家理解和使用。

torch.exp

函数原理

torch.exp是PyTorch库中的一个函数,它的作用是对输入的张量进行按元素指数运算。

指数运算是将基数的指数次幂的结果,例如,计算e的x次幂,其中e是自然对数的底数。torch.exp返回一个新的张量,张量的形状和输入张量相同,但是每个元素都是输入元素的指数运算结果1。

函数原型:

torch.exp(input)

参数:input:输入张量。
返回值:返回一个包含指数运算结果的张量。

运行示例

import torch

# 创建张量x
x = torch.tensor([-2.0, -4.0, 0.0, 6.0, 8.0])
# 使用exp函数计算x
y = torch.exp(x)
#打印计算结果y
print(y)

输出结果:

tensor([1.3534e-01, 1.8316e-02, 1.0000e+00, 4.0343e+02, 2.9810e+03])

torch.sigmoid()

函数原理

torch.sigmoid是一个在PyTorch库中提供的函数,用于将任何实数映射到介于0和1之间的值。具体来说,torch.sigmoid接受一个张量作为输入,然后应用sigmoid函数到每个元素上。sigmoid函数的定义如下:

sigmoid(x) = 1 / (1 + exp(-x))

这意味着对于任何输入x,输出将是0和1之间的值。
函数原型:

torch.sigmoid(input)

参数:
input:一个Tensor或者是张量。
返回值:
返回一个Tensor,其值在0和1之间。

运行示例

import torch

# 创建张量x
x = torch.tensor([-2.0, -4.0, 0.0, 6.0, 8.0])
# 使用sigmoid函数计算x
y = torch.sigmoid(x)
#打印计算结果y
print(y)

输出:

tensor([0.1192, 0.0180, 0.5000, 0.9975, 0.9997])

torch.sigmoid相关知识

应用到张量:torch.sigmoid可以接受一个一维张量(向量)或二维张量(矩阵)作为输入。对于矩阵,每个元素都将独立地应用sigmoid函数。

元素级别的操作:Sigmoid函数在每个输入元素的上下文中进行操作,将它们映射到0到1的范围内。这使得它在神经网络中非常有用,特别是在需要将某些值保持在0到1范围内的场景中。

梯度问题:由于sigmoid函数将所有值映射到0和1之间,因此在其梯度在此范围内是非常大的(接近于1)。这使得在反向传播过程中梯度的计算变得容易。

与ReLU一起使用:尽管ReLU函数(及其变体)在许多神经网络架构中非常流行,但在某些情况下,特别是在处理具有正负无穷大输出的模型时,sigmoid函数可能更合适。
计算复杂度:与ReLU相比,sigmoid的计算复杂度稍高。这是因为在接近饱和值(即接近0或1)时,sigmoid函数的计算需要乘法和指数运算。然而,这通常可以通过优化库(如PyTorch)中的实现来隐藏,这些实现通常使用GPU加速以提高性能。

可解释性:sigmoid函数提供了一种直观的方式来解释模型输出。例如,如果模型的最后一层使用了sigmoid激活函数,那么模型的输出可以被解释为概率。这在二元分类问题中特别有用,其中模型的输出被解释为属于某一类的概率。

总之,torch.sigmoid是一个非常有用的函数,在许多神经网络架构中都有应用。它提供了一种有效且直观的方式将输入映射到0和1之间,并在需要解释模型输出的场景中特别有用。

结合运行

在这里插入图片描述

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个多个graph训练VGAE的代码示例: ```python import dgl import torch import torch.nn.functional as F from dgl.nn import GraphConv from dgl.data import MiniGCDataset class VGAE(torch.nn.Module): def __init__(self, in_feats, hidden_size): super(VGAE, self).__init__() self.conv1 = GraphConv(in_feats, hidden_size) self.conv2 = GraphConv(hidden_size, hidden_size) self.mean_fc = torch.nn.Linear(hidden_size, hidden_size) self.logstd_fc = torch.nn.Linear(hidden_size, hidden_size) def forward(self, g): h = g.ndata['feat'] h = F.relu(self.conv1(g, h)) h = F.relu(self.conv2(g, h)) mean = self.mean_fc(h) logstd = self.logstd_fc(h) return mean, logstd def train(dataset): model = VGAE(10, 5) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) for epoch in range(10): for graph, _ in dataset: optimizer.zero_grad() h = graph.ndata['feat'] mean, logstd = model(graph) z = mean + torch.randn([graph.num_nodes(), 5]) * torch.exp(logstd) recon = torch.sigmoid(torch.matmul(z, z.t())) loss = -torch.mean( torch.sum(graph.adjacency_matrix().to_dense() * torch.log(recon) + (1 - graph.adjacency_matrix().to_dense()) * torch.log(1 - recon), dim=1)) kl_loss = -0.5 * torch.mean(torch.sum(1 + 2 * logstd - mean.pow(2) - torch.exp(logstd).pow(2), dim=1)) loss += kl_loss loss.backward() optimizer.step() if __name__ == '__main__': dataset = MiniGCDataset(80, 10, 20) graphs = [] for graph, _ in dataset: graphs.append(graph) batched_graph = dgl.batch(graphs) train(batched_graph) ``` 在这个示例中,我们首先定义了一个VGAE模型,然后在`train()`函数中,我们对数据集中的每个图进行了训练。注意,这里我们将所有图合并成一个大图,然后在训练时使用这个大图进行训练。这里的损失函数包括重构误差和KL散度,用于衡量生成的图与原始图之间的相似度。最后,我们将所有图合并到一个大图中,然后使用`train()`函数进行训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木彳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值