Pytorch中Softmax与LogSigmoid的对比分析

下面是关于PyTorch中Softmax与LogSigmoid的对比分析的完整攻略。

Softmax与LogSigmoid的介绍

在PyTorch中,Softmax和LogSigmoid是两种常用的激活函数。Softmax函数可以将一个向量映射到一个概率分布,而LogSigmoid函数可以将一个实数映射到一个介于0和1之间的值。

Softmax函数的公式如下:

$$
\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}
$$

其中,$x_i$表示输入向量中的第$i$个元素,$n$表示向量的长度。

LogSigmoid函数的公式如下:

$$
\text{logsigmoid}(x) = \log\left(\frac{1}{1+e^{-x}}\right)
$$

Softmax与LogSigmoid的对比分析

Softmax和LogSigmoid函数在神经网络中的应用有所不同。Softmax函数通常用于多分类问题,可以将输出向量映射到一个概率分布,从而方便计算交叉熵损失。而LogSigmoid函数通常用于二分类问题,可以将输出值映射到一个介于0和1之间的值,从而方便计算二元交叉熵损失。

以下是一个使用Softmax函数的示例,用于对MNIST数据集进行分类:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.datasets as datasets
import torchvision.transforms as transforms

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 256)
        self.fc2 = nn.Linear(256, 10)

    def forward(self, x):
        x = x.view(-1, 784)
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.softmax(self.fc2(x), dim=1)
        return x

# 加载数据集
train_dataset = datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor(), download=True)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)

# 训练模型
model = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

for epoch in range(10):
    for i, (inputs, labels) in enumerate(train_loader):
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

# 测试模型
correct = 0
total = 0
with torch.no_grad():
    for inputs, labels in test_loader:
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy: %d %%' % (100 * correct / total))

在这个示例中,我们定义了一个包含两个全连接层和Softmax激活函数的神经网络,用于对MNIST数据集进行分类。在训练过程中,我们使用交叉熵损失和随机梯度下降优化器来训练模型。在测试过程中,我们使用准确率来评估模型的性能。

以下是一个使用LogSigmoid函数的示例,用于对二分类问题进行分类:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.datasets as datasets
import torchvision.transforms as transforms

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 256)
        self.fc2 = nn.Linear(256, 1)

    def forward(self, x):
        x = x.view(-1, 784)
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.logsigmoid(self.fc2(x))
        return x

# 加载数据集
train_dataset = datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor(), download=True)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)

# 训练模型
model = Net()
criterion = nn.BCEWithLogitsLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

for epoch in range(10):
    for i, (inputs, labels) in enumerate(train_loader):
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels.float())
        loss.backward()
        optimizer.step()

# 测试模型
correct = 0
total = 0
with torch.no_grad():
    for inputs, labels in test_loader:
        outputs = model(inputs)
        predicted = (outputs > 0).float()
        total += labels.size(0)
        correct += (predicted == labels.float()).sum().item()

print('Accuracy: %d %%' % (100 * correct / total))

在这个示例中,我们定义了一个包含两个全连接层和LogSigmoid激活函数的神经网络,用于对二分类问题进行分类。在训练过程中,我们使用二元交叉熵损失和随机梯度下降优化器来训练模型。在测试过程中,我们使用准确率来评估模型的性能。

总结

Softmax和LogSigmoid函数在神经网络中的应用有所不同。Softmax函数通常用于多分类问题,可以将输出向量映射到一个概率分布,而LogSigmoid函数通常用于二分类问题,可以将输出值映射到一个介于0和1之间的值。在实际应用中,我们需要根据具体的问题选择合适的激活函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pytorch中Softmax与LogSigmoid的对比分析 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • GCN 图神经网络使用详解 可视化 Pytorch

    下面是关于GCN图神经网络使用详解及其可视化的攻略,包含两个示例说明。 示例1:定义GCN图神经网络类 以下是一个定义GCN图神经网络类的示例: import torch import torch.nn as nn import torch.nn.functional as F from torch_geometric.nn import GCNConv c…

    卷积神经网络 2023年5月16日
    00
  • CF838C(博弈+FWT子集卷积+多项式ln、exp)

    传送门: http://codeforces.com/problemset/problem/838/C 题解: 如果一个字符串的排列数是偶数,则先手必胜,因为如果下一层有后手必赢态,直接转移过去,不然,就一直耗着,因为是偶数,所以会让后手进入下一层,则后手必输。 排列数是偶数,打表发现\(|s|\)是奇数时,先手必赢,否则后手必赢,接下来尝试归纳这个结论。 …

    卷积神经网络 2023年4月7日
    00
  • Deep Learning.ai学习笔记_第四门课_卷积神经网络

    目录 第一周 卷积神经网络基础 第二周 深度卷积网络:实例探究 第三周 目标检测 第四周 特殊应用:人脸识别和神经风格转换   垂直边缘检测器,通过卷积计算,可以把多维矩阵进行降维。如下图:   卷积运算提供了一个方便的方法来发现图像中的垂直边缘。例如下图:   对于3×3的过滤器,使用下面的数字组合鲁棒性比较高,这样的过滤器也称为Sobel过滤器。   还…

    2023年4月7日
    00
  • 人脸识别性别的卷积神经网络

    本文主要是实现了根据人脸识别性别的卷积神经网络,并对卷积过程中的提取特征进行了可视化.         卷积神经网络 卷积神经网络最早是为了解决图像识别的问题,现在也用在时间序列数据和文本数据处理当中,卷积神经网络对于数据特征的提取不用额外进行,在对网络的训练的过程当中,网络会自动提取主要的特征. 卷积神经网络直接用原始图像的全部像素作为输入,但是内部为非全…

    2023年4月5日
    00
  • 《基于深度卷积神经网络的实体关系抽取》笔记

    研究背景:传统的基于机器学习的方法针对不同的自然语言处理任务时需要使用不同的统计模型和优化算法,涉及大量手工挑选任务相关特征,同时选择结果、受到传统自然语言处理工具的影响,易造成误差传播。 这篇论文是基于CNN的模型,做出了两个小的改进:1.在初始输入为词向量和位置向量的基础上增加了类别关键词特征。2.在池化层选择分段最大池化策略,而不是一般的最大池化策略。…

    2023年4月6日
    00
  • 卷积在计算机视觉方面的常见应用

    卷积在计算机视觉方面的常见应用 一、总结 一句话总结: 卷积在图像锐化、图像模糊、图像的边缘检测方面早有应用,有特定的卷积矩阵,比如图像模糊,就是中间9个全是1,这样就 起到了平均,也就是模糊的作用     二、卷积在计算机视觉方面的常见应用 博客对应课程的视频位置:                

    2023年4月8日
    00
  • 何为神经网络卷积层?

    摘要:本文深度讲解了卷积计算的原理,并详细介绍了构成所有卷积网络主干的基本元素,包括卷积层本身、填充和步幅的基本细节、用于在相邻区域汇聚信息的汇聚层,最后给出卷积层和汇聚层的代码示例和CNN框架结构图。 本文分享自华为云社区《神经网络基础部件-卷积层详解》,作者: 嵌入式视觉 。 前言 在全连接层构成的多层感知机网络中,我们要通过将图像数据展平成一维向量来送…

    2023年4月5日
    00
  • 卷积神经网络(3)—-经典网络 – 吱吱了了

    卷积神经网络(3)—-经典网络 卷积层要提升表达能力,主要依靠增加输出通道数,副作用是计算量增大和过拟合。 一、历史过程: 二、经典网络 1、LeNet:两层卷积+池化,两层全连接   2、AlexNet:5个卷积层、5个池化层、3个全连接层【大约5000万个参数】,最后一个全连接层输出到一个1000维的softmax层,产生一个1000类的分类。 优点…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部