當使用pytorch寫網路結構的時候,本人發現在卷積層與第乙個全連線層的全連線層的input_features不知道該寫多少?一開始本人的做法是對著pytorch官網的公式推,但是總是算錯。
後來發現,寫完卷積層後可以根據模擬神經網路的前向傳播得出這個。
全連線層的input_features是多少。首先來看一下這個簡單的網路。這個卷積的sequential本人就不再囉嗦了,現在看nn.linear(???, 4096)這個全連線層的第乙個引數該為多少呢?請看下文詳解。
class alexnet(nn.module):
def __init__(self):
super(alexnet, self).__init__()
self.conv = nn.sequential(
nn.conv2d(3, 96, kernel_size=11, stride=4),
nn.relu(inplace=true),
nn.maxpool2d(kernel_size=3, stride=2),
nn.conv2d(96, 256, kernel_size=5, padding=2),
nn.relu(inplace=true),
nn.maxpool2d(kernel_size=3, stride=2),
nn.conv2d(256, 384, kernel_size=3, padding=1),
nn.relu(inplace=true),
nn.conv2d(384, 384, kernel_size=3, padding=1),
nn.relu(inplace=true),
nn.conv2d(384, 256, kernel_size=3, padding=1),
nn.relu(inplace=true),
nn.maxpool2d(kernel_size=3, stride=2)
)self.fc = nn.sequential(
nn.linear(???, 4096)
......
......)1
2345
6789
1011
1213
1415
1617
1819
2021
2223
2425
2627
28首先,我們先把forward寫一下:
def forward(self, x):
x = self.conv(x)
print x.size()12
3就寫到這裡就可以了。其次,我們初始化一下網路,隨機乙個輸入:
import torch
from alexnet.alexnet import *
from torch.autograd import variable
if __name__ == '__main__':
net = alexnet()
data_input = variable(torch.randn([1, 3, 96, 96])) # 這裡假設輸入是96x96
print data_input.size()
net(data_input)12
3456
78910
結果如下:
卷積神經網路 pytorch
vocab args.vocab size 已知詞的數量 dim args.embed dim 每個詞向量長度 cla args.class num 類別數 ci 1 輸入的channel數 knum args.kernel num 每種卷積核的數量 ks args.kernel sizes 卷積核...
Pytorch 卷積神經網路
一般而言,輸入層的大小應該能夠被2整除很多次,常用32,64,96,224 盡可能使用小尺寸的濾波器,例如3 3,滑動步長選擇1。需要對輸入資料體進行零填充,保證輸出和輸入一樣的空間大小 對輸入資料空間進行下取樣 不使用的話,會導致影象邊緣資訊過快地損失掉 沒有人能在一開始就想清楚,只有開始做了,你...
卷積神經網路 卷積神經網路啟用層
在生物意義上的神經元中,只有前面的樹突傳遞的訊號的加權和值大於某乙個特定的閾值的時候,後面的神經元才會被啟用。簡單的說啟用函式的意義在於判定每個神經元的輸出 放在人臉識別卷積神經網路中來思考,卷積層的啟用函式的意義在於這一塊區域的特徵強度如果沒有達到一定的標準,就輸出0,表明這種特徵提取方式 卷積核...