一般而言,輸入層的大小應該能夠被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 的總結。其中 部分按照自己的習慣有所變動。構建神經網...