Pytorch中Softmax与LogSigmoid的对比分析

yizhihongxing

下面是关于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日

相关文章

  • CoordConv:给你的卷积加上坐标

    摘要:本文主要对CoordConv的理论进行了介绍,对其进行了复现,并展示了其在网络结构中的用法。 本文分享自华为云社区《CoordConv:给你的卷积加上坐标》,作者: 李长安。 一、理论介绍 1.1 CoordConv理论详解 这是一篇考古的论文复现项目,在2018年作者提出这个CoordConv模块的时候有很多文章对其进行批评,认为这个不值得发布一篇论…

    2023年4月5日
    00
  • 人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python【推荐】

    让我们来详细讲解一下“人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python【推荐】”。 标题 人工智能开发语言排行榜: 不死Java, 不朽C/C++, 新贵Python【推荐】 文章段落 人工智能是当今热门的技术领域之一,而选择合适的编程语言也是人工智能开发中重要的一环。下面将为大家介绍目前人工智能开发中常用的编程语言排行榜,以及它…

    卷积神经网络 2023年5月15日
    00
  • 滤波、形态学腐蚀与卷积(合集)

    https://blog.csdn.net/qq_36285879/article/details/82810705 S1.1 滤波、形态学腐蚀与卷积(合集) 参考:《学习OpenCV3》、《数字图像处理编程入门》文章目录 S1.1 滤波、形态学腐蚀与卷积(合集)滤波器简单模糊与方形滤波中值滤波高斯滤波双边滤波导数和梯度Sobel算子Scharr滤波器拉普拉…

    卷积神经网络 2023年4月8日
    00
  • 浅析PyTorch中nn.Module的使用

    当我们使用PyTorch进行深度学习模型的构建时,我们会涉及到很多不同模块的调用和拼接。而nn.Module是实现PyTorch中模型组件化的核心模块之一。在这篇文章中,我们将会介绍如何使用nn.Module来实现深度学习中的常见操作,并使用两个示例来说明。 一、 nn.Module简介 nn.Module是PyTorch中模型组件化的核心模块之一。简单来说…

    卷积神经网络 2023年5月15日
    00
  • R-FCN:基于区域的全卷积网络来检测物体

    http://blog.csdn.net/shadow_guo/article/details/51767036 原文标题为“R-FCN: Object Detection via Region-based Fully Convolutional Networks ”,作者代季峰 1,14年毕业的清华博士到微软亚洲研究院的视觉计算组,CVPR 16 两篇一作…

    卷积神经网络 2023年4月7日
    00
  • 图卷积神经网络GCN系列二:节点分类(含示例及代码)

    图上的机器学习任务通常有三种类型:整图分类、节点分类和链接预测。本篇博客要实现的例子是节点分类,具体来说是用GCN对Cora数据集里的样本进行分类。 Cora数据集介绍: Cora数据集由许多机器学习领域的paper构成,这些paper被分为7个类别: Case_Based Genetic_Algorithms Neural_Networks Probabi…

    2023年4月8日
    00
  • python神经网络VGG16模型复现及其如何预测详解

    下面是关于Python神经网络VGG16模型复现及其如何预测的攻略,包含两个示例说明。 示例1:使用Keras库复现VGG16模型 以下是一个使用Keras库复现VGG16模型的示例: from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flat…

    卷积神经网络 2023年5月16日
    00
  • 20160620卷积神经网络

    预备知识:前向神经网络和BP训练算法。cnn目前主要应用在图像领域,它的网络结构相对于普通的神经网络来说,有了卷积层以及参数共享机制使得参数数量大大减少。 1. CNN结构 先来个图吧! 1.1 数据输入层DATA 上图没画出来,这个是放在最前做的,毕竟是数据输入层嘛!一般数据输入层需要可以进行以下操作:去均值(cnn只做这个,把train data各个维度…

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