padding layers
非线性激活
一般卷积层后面都要跟非线性激活
1、RELU函数
对输入输出的shape不做限制。RELU函数可用于隐藏层。
版本更新后可以不要batch_size,三维的数据就OK
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)
class Demo(nn.Module):
def __init__(self) -> None:
super().__init__()
self.relu1=ReLU()
def forward(self,input):
output=self.relu1(input)
return output
demo=Demo()
output=demo(input)
print(output)
结果
输出结果比0大的是本身,比0小的是0
2、sigmoid函数
输入输出的形状不受限制。sigmoid在二分类问题上用的比较多。
import torch
import torchvision
from torch import nn
from torch.nn import Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset=torchvision.datasets.CIFAR10("dataset_CIFAR10",
train=False,
transform=torchvision.transforms.ToTensor())
dataloader=DataLoader(dataset,batch_size=64)
class Demo(nn.Module):
def __init__(self) -> None:
super().__init__()
self.sigmoid1=Sigmoid()
def forward(self,input):
output=self.sigmoid1(input)
return output
demo=Demo()
writer=SummaryWriter("logs_sigmoid")
step=0
for data in dataloader:
imgs,targets=data
writer.add_images("input",imgs,step)
output=demo(imgs)
writer.add_images("output",output,step)
step=step+1
writer.close()
结果
遗留问题:OpenCV的图像变灰