一、Linear函数
nn.Linear 是 PyTorch 中的线性层(也称为全连接层或仿射层)的类,
用于构建神经网络中的线性变换。线性层将输入张量与权重矩阵相乘,
然后添加偏置(偏移量)来产生输出。这是深度学习中最常见的一种层类型之一
,通常用于将输入数据映射到输出数据。
y=xw+b
lunera的作用就是对n行i列的矩阵X进行线性变换
torch.nn.Linear(in_features, # 输入的神经元个数
out_features, # 输出神经元个数
bias=True # 是否包含偏置
)
二、relu函数
relu函数就是将大于0的数原数输出,小于或者等于0的数输出0
ReLU的优点:①ReLu具有稀疏性,可以使稀疏后的模型能够更好地挖掘相关特征,拟合训练数据;
②在x>0区域上,不会出现梯度饱和、梯度消失的问题;
③计算复杂度低,不需要进行指数运算,只要一个阈值就可以得到激活值。
RuLU的缺点也同样明显:①输出不是0对称
②由于小于0的时候激活函数值为0,梯度为0,所以存在一部分神经元永远不会得到更新
三、softmax函数
softmax多用于类别识别问题,不会改变类别的值,改变类别的概率
Softmax 可以使数值较大的值获得更大的概率
Softmax 函数在深度学习中被广泛应用,其主要优点包括:
归一化输出:Softmax 函数能够将输入转换为概率分布,确保输出值的范围在 [0, 1] 之间,并且所有输出的总和为 1。这使得 Softmax 输出可以被解释为各个类别的概率。
适用于多分类任务:Softmax 函数通常用于多分类问题,它可以将模型的输出转换为各个类别的概率分布,从而方便进行多分类任务的训练和预测。
导数形式简单:Softmax 函数的导数形式相对简单,计算也相对高效,这使得它在反向传播算法中的使用更加方便和高效。
log_softmax与softmax的区别在于输出的形式不同,softmax输出的是概率分布
,而log_softmax输出的是对数概率分布。
在实际应用中,log_softmax通常用于计算损失函数,而softmax则用于预测。
nllloss函数理解为 - log(softmax(x))
NLLLoss(Negative Log Likelihood Loss)通常用于多分类任务中,特别是在输出层使用了 log_softmax 函数的情况下。
它的主要作用是计算模型输出的对数概率与真实标签之间的差异,并将其作为损失函数进行优化。
torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean')
weight表示每个类别的权重,当标签不平衡的时候可以使用来防止过拟合。
size_average表示是否将样本的loss进行平均之后输出,默认为true。
ignore_index表示忽略某一类别,不想训练某些类别时可用。
reduce表示是否将输出进行压缩,默认为true。当它为false的时候就会无视size_average。
reduction表示用怎么的方法进行reduce。可以设置为'none','mean','sum'。
全连接层连接每个神经元
在cnn算法中全连接层用于将图片进行降维从多维变为1维,将数据进行提取特和进行分类。
卷积层
卷积层的作用是用来提取特征,卷积层主要涉及的参数包括:滑动窗口步长,卷积核尺寸,填充边缘,卷积核个数
池化层的常见操作包含以下几种:最大值池化,均值池化,随机池化,中值池化,组合池化等。
池化层压缩过程:在通过卷积层后对特征图进行筛选
通过特征提取,实现分类
全部代码:
# import torch
# import torch.nn as nn
#
# # 定义输入特征数量和输出特征数量
# in_features = 10
# out_features = 5
# # 创建一个线性变换层
# linear_layer = nn.Linear(in_features, out_features)
# # 随机生成一个输入张量
#
# input_tensor = torch.randn(1, 12, 32, 10)
# #其中1表示批量大小,12表示通道数,32和10表示高度和宽度。
# # 对输入张量进行线性变换
# output_tensor = linear_layer(input_tensor)
# # 打印输出张量
# print("输出张量的形状:", output_tensor.shape)
#
# import torch
from matplotlib import pyplot
# rectified linear function
# def rectified(x):
# return max(0.0, x)
#
#
# # define a series of inputs
# series_in = [x for x in range(-10, 11)]
# # calculate outputs for our inputs
# series_out = [rectified(x) for x in series_in]
# # line plot of raw inputs to rectified outputs
# pyplot.plot(series_in, series_out)
# pyplot.show()
# import torch
# import torch.nn.functional as F
#
# # 创建一个输入张量
# input_tensor = torch.tensor([[1.0, 2.0, 3.0]])
#
# # 应用 softmax 函数
# output_tensor = F.softmax(input_tensor, dim=1)
#
# # 打印输出张量
# print("输出张量:", output_tensor)
# import torch
# import torch.nn.functional as F
#
# # 创建一个输入张量
# input_tensor = torch.tensor([[0.5, 0.2, 0.3], [0.1, 0.3, 0.6]])
#
# # 创建一个目标张量
# target = torch.tensor([0, 2])
#
# # 应用 log_softmax 函数
# log_probs = F.log_softmax(input_tensor, dim=1)
#
# # 计算 NLLLoss
# loss = F.nll_loss(log_probs, target)
#
# # 打印损失值
# print("损失值:", loss.item())
import torch
import torch.nn as nn
# 创建一个全连接层实例
fc_layer = nn.Linear(in_features=10, out_features=5)
# 创建一个随机输入张量(batch_size=1,input_features=10)
input_data = torch.randn(1, 10)
# 将输入数据传递给全连接层并获取输出
output = fc_layer(input_data)
# 打印输出的形状
print("输出张量的形状:", output.shape)