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日

相关文章

  • 空洞卷积(Atrous Convolution)的优缺点

    空洞卷积(atrous convolution)又叫扩张卷积(dilated convolution),其实就是向卷积层引入了一个称为“扩张率(dilation rate)”的新参数,这个参数定义了卷积核处理数据时各值的间距。普通卷积和空洞卷积图示如下(以3*3卷积为例)    (普通卷积)    (空洞卷积) 那么这样的结构是为了解决什么问题呢? 这又不得…

    2023年4月8日
    00
  • 图像处理之基础—二维卷积c实现

    http://wenku.baidu.com/link?url=4RzdmvP9sdaaUbnVEW4OyBD-g67wIOiJjKFF3Le_bu7hIiBS7I6hMcDmCXrQwsHvrsPvR4666J1qF1ff5JVvd2xL8rzL9N81qvL-1dwkiim  特别说明一下,根据那本书所说,这算的是线性卷积。还有种卷积叫循环卷积。 (1)…

    卷积神经网络 2023年4月8日
    00
  • lecture5-对象识别与卷积神经网络

    Hinton第五课 突然不知道object recognition 该翻译成对象识别好,还是目标识别好,还是物体识别好,但是鉴于范围性,还是翻译成对象识别吧。这一课附带了两个论文《Convolutional Networks for Images,Speech,and Time-series》在前面翻译过:http://blog.csdn.net/shouh…

    2023年4月8日
    00
  • Deep Learning系统实训之三:卷积神经网络

      边界填充(padding):卷积过程中,越靠近图片中间位置的像素点越容易被卷积计算多次,越靠近边缘的像素点被卷积计算的次数越少,填充就是为了使原来边缘像素点的位置变得相对靠近中部,而我们又不想让填充的数据影响到我们的计算结果,故填充值选择均用0来填充。 池化层不需要参数、只是对特征图进行压缩操作,以减少计算量:池化几乎不用平均池化,多用最大池化操作,对于…

    2023年4月8日
    00
  • 【CNN】— 卷积过程中RGB与灰度的区别

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/hacker_Dem_br/article/details/88786661 RGB image 输入的图像有RGB3个channel,假设有100个filter,输出的就有100个feature m…

    2023年4月7日
    00
  • 深入理解卷积层

    https://blog.csdn.net/m0_37407756/article/details/80904580 有部分内容是转载的知乎的,如有侵权,请告知,删除便是,但由于是总结的,所以不一一列出原作者是who。 再次感谢,也希望给其他小白受益。 首先说明:可以不用全连接层的。 理解1: 卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组…

    卷积神经网络 2023年4月8日
    00
  • 对Tensorflow中权值和feature map的可视化详解

    下面是关于对Tensorflow中权值和feature map的可视化详解的攻略,包含两个示例说明。 示例1:可视化权值 以下是一个可视化权值的示例: import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 加载模型 model = tf.keras.appli…

    卷积神经网络 2023年5月16日
    00
  • 手写数字识别-卷积神经网络cnn(06-2)

    卷积和池化在深度学习中的作用是对图像和文本信息提取特征的常用方式,特别是在分类领域 卷积:通过不同的卷积核与图像或文本数据矩阵 进行矩阵相乘,得到不同特征的若干组训练特征数据 池化:池化通常有两种最大池化(max-pooling)和平均池化,最大池化就是在一块矩阵区域(比如2X2,4个像素点),取最大的那个值作为输出,平均池化就是取四个像素点的平均值作为输出…

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