非线性激活(1)
一、非线性激活函数
1.ReLu
CLASStorch.nn.ReLU(inplace=False)
函数图像:
代码实例1:
import torch
import torch.nn as nn
input = torch.tensor([[1,-0.5],
[-1,3]])
input = torch.reshape(input,(-1,1,2,2))
print(input.shape)
class Module(nn.Module):
def __init__(self):
super().__init__()
# inplace=False 可以产生返回值 且 input仍然为原来的值 可以保留原来的数据
# inplace=True 不产生返回值 且 input为relu1计算的值
self.relu1 = nn.ReLU(inplace=False)
def forward(self,input):
output = self.relu1(input)
return output
if __name__ == '__main__':
mymodule = Module()
output = mymodule(input)
print(output)
运行结果:
torch.Size([1, 1, 2, 2])
tensor([[[[1., 0.],
[0., 3.]]]])
# 运行结果将 input 中小于0 的全部变为0
2.Sigmod
CLASStorch.nn.Sigmoid
函数图像:
代码实例:
import torchvision
import torch.nn as nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset = torchvision.datasets.CIFAR10("./dataset",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataLoader = DataLoader(dataset,batch_size=64)
writer = SummaryWriter("p10")
# 网络模型
class Module(nn.Module):
def __init__(self):
super().__init__()
# inplace=False 可以产生返回值 且 input仍然为原来的值 可以保留原来的数据
# inplace=True 不产生返回值 且 input为relu1计算的值
self.relu1 = nn.ReLU(inplace=False)
# Sigmod函数
self.sigmod1 = nn.Sigmoid()
def forward(self,input):
# output = self.relu1(input)
output = self.sigmod1(input)
return output
if __name__ == '__main__':
mymodule = Module()
step = 0
for data in dataLoader:
imgs,targets = data
writer.add_images("input",imgs,step)
# 通过神经网络对图片进行处理
output = mymodule(imgs)
writer.add_images("output", output, step)
step += 1
writer.close()
终端运行:
tensorboard --logdir=p10
运行结果: