非线性激活,即
这是最常用的
inplace=True 原位操作 改变变量本身的值,就是是否输入时若原本有值,是否更换
该函数就是表示:输入小于零时输出0,大于零时保持不变
代码如下:
import torch
from torch import nn
from torch.nn import ReLUinput=torch.tensor([[1,-0.5],[-1,3]])
input=torch.reshape(input,(-1,1,2,2))
print(input.shape)
class Tudui(nn.Module):def __init__(self) -> None:super(Tudui, self).__init__()self.relu1=ReLU()def forward(self,input):output=self.relu1(input)return outputtudui=Tudui()
output=tudui(input)
print(output)
非线性激活的作用就是引入非线性,
非线性激活函数(Non-linear Activation Function)是神经网络中的一个重要组成部分。它们被应用于每个神经元的输出,以引入非线性特性。具体来说,非线性激活函数将神经元的线性组合(即加权和加上偏置)转化为非线性输出。
引入非线性特性:没有非线性激活函数的神经网络只能表达线性关系,无论网络有多少层。通过引入非线性,神经网络可以处理复杂的非线性问题,从而能够逼近任何连续的函数。
增加模型的表达能力:非线性激活函数使得多层网络具有更强的表达能力,可以拟合复杂的数据分布,解决复杂的任务,如图像识别、自然语言处理等。
使得深度学习变得可能:深度神经网络中的层数很多,如果每一层都只是线性的叠加,那么无论多少层,最终的模型还是一个线性模型。非线性激活函数使得每一层的输出变得不同,从而使深度学习成为可能。
import torch
import torchvision
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdata_transform=torchvision.transforms.Compose([torchvision.transforms.ToTensor()]
)
test_data=torchvision.datasets.CIFAR10('./dataset',train=False,transform=data_transform,download=True)
dataloader=DataLoader(dataset=test_data,batch_size=64)
class Tudui(nn.Module):def __init__(self) -> None:super(Tudui, self).__init__()self.relu1=ReLU()self.sigmoid1=Sigmoid()def forward(self,input):output=self.sigmoid1(input)return outputwriter=SummaryWriter('rules')tudui=Tudui()
step=0
for data in dataloader:imgs,targets=datawriter.add_images('input',imgs,step)output=tudui(imgs)writer.add_images('output', output, step)step=step+1writer.close()