pytorch神經網路之卷積層與全連線層引數的設定

2021-09-24 19:20:17 字數 1635 閱讀 9941

當使用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,表明這種特徵提取方式 卷積核...