Pytorch 卷積神經網路

2021-10-03 16:46:51 字數 4021 閱讀 2401

一般而言,輸入層的大小應該能夠被2整除很多次,常用32, 64, 96, 224

盡可能使用小尺寸的濾波器,例如3*3,滑動步長選擇1。需要對輸入資料體進行零填充,保證輸出和輸入一樣的空間大小

對輸入資料空間進行下取樣

不使用的話,會導致影象邊緣資訊過快地損失掉

"""沒有人能在一開始就想清楚,只有開始做了,你才會越來越清楚——馬克·扎克伯格"""

"""乙個簡單的卷積神經網路"""

from torch import nn

class

******cnn

(nn.module)

:def

__init__

(self)

:super

(******cnn, self)

.__init__(

)# 第一層

layer1 = nn.sequential(

) layer1.add_module(

'conv1'

, nn.conv2d(3,

32,3,

1, padding=1)

)# b, 32, 32, 32

layer1.add_module(

'relu1'

, nn.relu(

true))

layer1.add_module(

'pool1'

, nn.maxpool2d(2,

2))# b, 32, 16, 16

self.layer1 = layer1

# 第二層

layer2 = nn.sequential(

) layer2.add_module(

'conv2'

, nn.conv2d(32,

64,3,

1, padding=1)

)# b, 64, 16, 16

layer2.add_module(

'relu2'

, nn.relu(

true))

layer2.add_module(

'pool2'

, nn.maxpool2d(2,

2))# b, 64, 8, 8

self.layer2 = layer2

# 第三層

layer3 = nn.sequential(

) layer3.add_module(

'conv2'

, nn.conv2d(64,

128,3,

1, padding=1)

) layer3.add_module(

'relu3'

, nn.relu(

true))

layer3.add_module(

'pool3'

, nn.maxpool2d(2,

2))# b, 128, 4, 4

self.layer3 = layer3

# 第四層(全連線層)

layer4 = nn.sequential(

) layer4.add_module(

'fc1'

, nn.linear(

2048

,512))

layer4.add_module(

'fc_relu1'

, nn.relu(

true))

layer4.add_module(

'fc2'

, nn.linear(

512,64)

) layer4.add_module(

'fc_relu2'

, nn.relu(

true))

layer4.add_module(

'fc3'

, nn.linear(64,

10)) self.layer4 = layer4

defforward

(self, x)

: conv1 = self.layer1(x)

conv2 = self.layer2(conv1)

conv3 = self.layer3(conv2)

fc_input = conv3.view(conv3.size(0)

,-1)

fc_output = self.layer4(fc_input)

return fc_output,conv1,conv2, conv3

model = ******cnn(

)print

(model)

# ----------提取引數----------------------------------------------

"""named_parameters()給出網路層的名字和引數的迭代器

parameters()給出網路的全部引數"""

for param in model.named_parameters():

print

(param[0]

)

******cnn(

(layer1): sequential(

(conv1): conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))

(relu1): relu(inplace=true)

(pool1): maxpool2d(kernel_size=2, stride=2, padding=0, dilation=1,

ceil_mode=false)

)(layer2): sequential(

(conv2): conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))

(relu2): relu(inplace=true)

(pool2): maxpool2d(kernel_size=2, stride=2, padding=0, dilation=1,

ceil_mode=false)

)(layer3): sequential(

(conv2): conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))

(relu3): relu(inplace=true)

(pool3): maxpool2d(kernel_size=2, stride=2, padding=0, dilation=1,

ceil_mode=false)

)(layer4): sequential(

(fc1): linear(in_features=2048, out_features=512, bias=true)

(fc_relu1): relu(inplace=true)

(fc2): linear(in_features=512, out_features=64, bias=true)

(fc_relu2): relu(inplace=true)

(fc3): linear(in_features=64, out_features=10, bias=true)))

layer1.conv1.weight

layer1.conv1.bias

layer2.conv2.weight

layer2.conv2.bias

layer3.conv2.weight

layer3.conv2.bias

layer4.fc1.weight

layer4.fc1.bias

layer4.fc2.weight

layer4.fc2.bias

layer4.fc3.weight

layer4.fc3.bias

卷積神經網路 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(二)定義卷積神經網路

個人認為神經網路的的搭建 雖然很簡單,但是確實最為重要的一部分。話不多說,開始介紹。1 init 初始化網路,定義網路的一些引數,以及他的層結構 2 forward 定義層結構之間的關係 可能沒太看明白,沒關係看了 你就會很清晰了 import torch import torch.nn as nn...

pytorch學習 構建卷積神經網路

本文是對隧道 https org tutorials beginner blitz neural networks tutorial.html sphx glr beginner blitz neural networks tutorial py 的總結。其中 部分按照自己的習慣有所變動。構建神經網...