神经网络-非线性激活
Padding Layers -> nn.ZeroPad2d -> 将输入的tensor周围用0填充
卷积层中填充的时候用padding填充的时候只能用0来填充,即padding=0,和nn.ZeroPad2d一样
nn.ConstantPad2d ->用常数进行一些填充
Padding Layers都是对输入图像进行填充的几种方式,但几乎用不到,绝大多数也可以在卷积层中实现
Non-linear Activations (weighted sum, nonlinearity) -> ReLU
torch.nn.ReLU(inplace=False)[source]
非线性激活就是给我们的神经网络中引入一些非线性的特质,最常见的是ReLU
Input < 0,截断为0;Input > 0,为原始值
Non-linear Activations (weighted sum, nonlinearity) -> Sigmoid
torch.nn.Sigmoid(*args, **kwargs)
输入为x,按照以下公式计算输出:
以ReLU举例,截断好算
inplace是什么?
input = -1
ReLU(input, inplace=True)
input = 0
input = -1
output = ReLU(input, inplace=False)
input = -1
output = 0
原地操作,一般情况inplace=False,防止原始数据丢失,默认是False,就不用管它
import torch
from torch import nn
from torch.nn import ReLU
input = torch.tensor([[1, -0.5],
[-1, 3]])
input = torch.reshape(input, (-1, 1, 2, 2))
print(input.shape)
class nn_relu(nn.Module):
def __init__(self):
super(nn_relu, self).__init__()
self.relu1 = ReLU()
def forward(self, input):
output = self.relu1(input)
return output
NN_relu = nn_relu()
output = NN_relu(input)
print(output)
返回:
torch.Size([1, 1, 2, 2])
tensor([[[[1., 0.],
[0., 3.]]]])
因为图像3个通道的取值都是0-255,用ReLU等于没有变化,用Sigmoid才能映射到0-1的区间,使用数据集演示:
import torch
import torchvision
from torch import nn
from torch.ao.nn.quantized import Sigmoid
from torch.nn import ReLU
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset = torchvision.datasets.CIFAR10(root="P19_nn_maxpool/dataset", train=False, transform=torchvision.transforms.ToTensor(), download=True)
dataLoader = DataLoader(dataset, batch_size=64)
class nn_relu(nn.Module):
def __init__(self):
super(nn_relu, self).__init__()
self.relu1 = ReLU()
self.sigmoid1 = nn.Sigmoid()
def forward(self, input):
output = self.sigmoid1(input)
return output
NN_relu = nn_relu()
writer = SummaryWriter(log_dir="logs")
step = 0
for data in dataLoader:
imgs, targets = data
writer.add_images("input", imgs, step)
output = NN_relu(imgs)
writer.add_images("output", output, step)
step += 1
writer.close()
非线性变换的主要目的就是给网络引入非线性特征,因为非线性越多,才能训练出符合各种曲线或者特征的模型,否则模型的泛化能力就不够好
原始资料地址:
神经网络-非线性激活
如有侵权联系删除 仅供学习交流使用