????????非線性激活函數的作用是讓神經網絡能夠理解更復雜的模式和規律。如果沒有非線性激活函數,神經網絡就只能進行簡單的加法和乘法運算,沒法處理復雜的問題。
????????非線性變化的目的就是給我們的網絡當中引入一些非線性特征
Relu 激活函數
Relu處理圖像
# 導入必要的庫
from os import close
import torch
import torchvision.datasets
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter# 加載CIFAR-10測試數據集,將圖像轉換為Tensor格式
dataset = torchvision.datasets.CIFAR10("./data", train=False, download=True,transform=torchvision.transforms.ToTensor())# 創建數據加載器,設置批量大小為64
dataloader = DataLoader(dataset, batch_size=64)# 定義神經網絡模型TY
class TY(nn.Module):def __init__(self):super(TY, self).__init__()# 定義ReLU激活函數層self.relu1 = ReLU()# 定義Sigmoid激活函數層(當前未在forward中使用)self.sigmod1 = Sigmoid()def forward(self, input):# 前向傳播過程,對輸入數據應用ReLU激活函數output = self.relu1(input)return output# 實例化模型
ty = TY()# 創建TensorBoard寫入器,用于可視化數據
writer = SummaryWriter("./logs_relu")# 初始化步數計數器
step = 0
# 遍歷數據加載器中的每個批次
for data in dataloader:# 獲取圖像數據和對應的標簽imgs, target = data# 向TensorBoard添加原始輸入圖像writer.add_images("input", imgs, step)# 將圖像數據輸入模型,得到經過ReLU處理后的輸出output = ty(imgs)# 向TensorBoard添加處理后的輸出圖像writer.add_images("output", output, step)# 步數計數器遞增step += 1# 關閉TensorBoard寫入器,釋放資源
writer.close()
ReLU處理圖像,效果不是很明顯
Sigmoid激活函數
from os import close
import torch
import torchvision.datasets
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("./data",train=False,download=True,transform=torchvision.transforms.ToTensor())dataloader = DataLoader(dataset,batch_size=64)class TY(nn.Module):def __init__(self):super(TY,self).__init__()self.relu1=ReLU()self.sigmoid1 = Sigmoid()def forward(self,input):output = self.sigmoid1(input)return outputty = TY()writer = SummaryWriter("./logs_relu")step = 0
for data in dataloader:imgs,target=datawriter.add_images("input",imgs,step)output = ty(imgs)writer.add_images("output",output,step)step+=1writer.close()