小土堆视频:https://www.bilibili.com/video/BV1hE411t7RN?spm_id_from=333.788.videopod.episodes&vd_source=6cb513d59bf1f73f86d4225e9803d47b&p=19
非线性变换的主要目的:引入非线性能力,使模型能够学习复杂的映射关系。如果没有非线性激活,神经网络本质上相当于一个线性变换,无法拟合复杂的数据分布。
以下是使用relu/sigmoid的例子:
dataset=torchvision.datasets.CIFAR10(root='./dataset', train=False, download=True,transform=torchvision.transforms.ToTensor())
dataloader=torch.utils.data.DataLoader(dataset,batch_size=64,shuffle=True)class MM(torch.nn.Module):def __init__(self):super(MM, self).__init__()self.relu1=ReLU()self.sigmoid1=torch.nn.Sigmoid()def forward(self,x):output=self.sigmoid1(x)return outputmm=MM()
writer=SummaryWriter(log_dir='./relu_logs')
step=0
for data in dataloader:imgs,targets=datawriter.add_images("input",imgs,step)output=mm(imgs)writer.add_images("output",output,step)step+=1writer.close()
得到的结果如下所示: