初识卷积神经网络
一、LeNet網(wǎng)絡(luò)(1998)
LeNet網(wǎng)絡(luò)有五層。兩個卷積層,三個全連接層。這里說的卷積層包括激活層和池化層,全連接層包括連接層和激活層。
self.conv = torch.nn.Sequential(torch.nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,stride=1,padding=0),torch.nn.Sigmoid(),torch.nn.MaxPool2d(kernel_size=(2,2),stride=2),torch.nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5,stride=1,padding=0),torch.nn.Sigmoid(),torch.nn.MaxPool2d(kernel_size=(2,2),stride=2)) self.fc = torch.nn.Sequential(torch.nn.Linear(16*4*4,120),torch.nn.Sigmoid(),torch.nn.Linear(120,84),torch.nn.Sigmoid(),torch.nn.Linear(84,10))二、AlexNet網(wǎng)絡(luò)(2012)
AlexNet網(wǎng)絡(luò)一共有八層,前有五個卷積層,后面為三個全連接層。
self.conv = nn.Sequential(nn.Conv2d(1, 96, 11, 4),nn.ReLU(),nn.MaxPool2d(3, 2), nn.Conv2d(96, 256, 5, 1, 2),nn.ReLU(),nn.MaxPool2d(3, 2),nn.Conv2d(256, 384, 3, 1, 1),nn.ReLU(),nn.Conv2d(384, 384, 3, 1, 1),nn.ReLU(),nn.Conv2d(384, 256, 3, 1, 1),nn.ReLU(),nn.MaxPool2d(3, 2))self.fc = nn.Sequential(nn.Linear(256*5*5, 4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096, 4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096, 10),)激活函數(shù)的選取和區(qū)別:
1、sigmoid函數(shù):
f(x)=1/(1+e(?x))f(x)={1}/{(1+e^{(-x)})}f(x)=1/(1+e(?x))
(1)sigmoid函數(shù)當(dāng)值特別大或者特別小,會是梯度趨于0,即sigmoid函數(shù)飽和使梯度消失。
(2)sigmoid函數(shù)輸出不是“零為中心”
(3)指數(shù)函數(shù)的計(jì)算是比較消耗計(jì)算資源的。
2、tanh函數(shù)
tanh(x)=(1?e?2x)/(1+e?2x)tanh(x) = {(1-e^{-2x})/(1+e^{-2x})}tanh(x)=(1?e?2x)/(1+e?2x)
(1)tanh解決了sigmoid的輸出非“零為中心”的問題
(2)依然有過飽和的問題
(3)依然進(jìn)行的是指數(shù)運(yùn)算
3、ReLU函數(shù)
f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x)
(1)解決了梯度消失的問題,至少x在正區(qū)間內(nèi),神經(jīng)元不會飽和;
(2)由于ReLU線性、非飽和的形式,在SGD中能夠快速收斂;
(3)運(yùn)算速度要快很多。ReLU函數(shù)只有線性關(guān)系,不需要指數(shù)計(jì)算,不管前向傳播還是反向傳播,計(jì)算速度都比sigmoid和tanh快。
還有幾種類似ReLU函數(shù)的激活函數(shù),這里不詳細(xì)說了
總結(jié)
- 上一篇: mysql根据已有表创建新表_SQL根据
- 下一篇: mqtt android封装,Andro