1.什么是激活函数
激活函数(Activation Function)是神经网络中的一个关键组成部分,作用是在神经元接收到输入信号后,决定是否将信号传递到下一层神经元。激活函数可以引入非线性,从而使得神经网络能够表示更复杂的函数关系。
线性激活函数:输出是输入的线性变换,例如 f(x) = x。线性激活函数无法引入非线性特性,因此,无论网络有多少层,用线性激活函数的网络最终相当于一个单层的线性变换,无法解决复杂的任务。
非线性激活函数:输出是输入的非线性变换,如 ReLU、Sigmoid、Tanh 等。非线性激活函数可以引入非线性特性,使得神经网络能够学习并表示复杂的函数和决策边界。它们是现代神经网络的核心,因为没有非线性激活函数,神经网络的表达能力会受到极大限制。
2.常见的非线性激活函数
1.ReLU
ReLU(x) = max(0, x),如果输入是正数,则输出等于输入;如果输入是负数或零,则输出为零。
2.Sigmoid
Sigmoid(x) = 1 / (1 + e^(-x)),就是将输入值映射到 (0, 1)
的范围内,通常用于二分类问题。非线性,但容易导致梯度消失问题,尤其是在深层网络中。
3.Tanh(双曲正切函数)
Tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x)),将输入值映射到 (-1, 1)
的范围内。输出范围比Sigmoid更大,通常在深层网络中表现比Sigmoid更好,但仍有梯度消失问题。
3.代码实现
"""
非线性激活
padding层几乎用不到,就是对输入图像用各种方法填充,我还不如用卷积层和池化层里填了拉倒
non_liner activations很简单,尤其是ReLU(x) = Max(0 , x)
Sigmoid(x) = 1 / (1 + e^(-x)),取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
Relu(input , inplace)中的input要求其为[batch , channel , h , w]形式
inplace如果为true,则直接将input的值替换,否则就需要额外一个存储改变后的值,但是input的内容不变
"""
import torch
import torch.nn.functional as F
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset = torchvision.datasets.CIFAR10('E:\\PyCharm_Project\\Pytorch_2.3.1\\PytorchVision\\dataset', train=False,
transform=torchvision.transforms.ToTensor(), download=True)
dataloader = DataLoader(dataset, batch_size=64)
# input = torch.tensor([[1,-1],
# [-1.1,3]], dtype=torch.float)
# input = torch.reshape(input, (-1 , 1 , 2 , 2))
# print(input.shape)
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.relu = torch.nn.ReLU()
self.sig = torch.nn.Sigmoid()
def forward(self, x):
x = self.sig(x)
return x
writer = SummaryWriter("logs")
model = Net()
step = 1
for data in dataloader:
imgs, labels = data
writer.add_images("input", imgs, step)
outputs = model(imgs)
writer.add_images("output", outputs, step)
step += 1
writer.close()
通常,在图像处理中,像素值通常为 [0, 1] 或 [0, 255] 之间的浮点数或整数。加载 CIFAR-10 图像时,使用了 ToTensor() 转换,这将图像像素值标准化到 [0, 1] 范围内。 由于 Sigmoid 函数的输出范围在 (0, 1) 之间,并且对于接近 0 的输入值,输出更接近 0.5,因此像素值整体被压缩并接近于中间值(0.5),这样会使得图像整体缺乏对比度,看起来较为灰暗。