深度學習pytorch 卷積神經網路

2022-09-20 06:24:07 字數 2062 閱讀 8598

def

corr2d(x, k):

h, w =k.shape

y = torch.zeros(x.shape[0]-h+1, x.shape[1]-w+1)

for i in

range(y.shape[0]):

for j in range(y.shape[1]):

y[i,j] = (x[i:i+h, j:j+w] *k).sum()

return y

卷積層:

class

conv2d(nn.module):

def__init__

(self, kernel_size):

super().

__init__

() self.weight =nn.parameter(torch.rand(kernel_size))

self.bias = nn.parameter(torch.zeros(1))

defforward(self, x):

return corr2d(x, self.weight) + self.bias

簡單運用:邊緣檢測通過找到畫素變化的位置,來檢測影象中不同顏色的邊緣。 首先,我們構造乙個6×8

'>6×8

畫素的黑白影象。中間四列為黑色(0

'>

0),其餘畫素為白色(1

接下來,我們構造乙個高度為1

'>

1、寬度為2

'>

2的卷積核k。當進行互相關運算時,如果水平相鄰的兩元素相同,則輸出為零,否則輸出為非零。

對引數x(輸入)和k(卷積核)執行互相關運算。 如下所示,輸出y中的1代表從白色到黑色的邊緣,-1代表從黑色到白色的邊緣,其他情況的輸出為0

學習卷積核

學習由x生成y的卷積核呢

先構造乙個卷積層,並將其卷積核初始化為隨機張量。接下來,在每次迭代中,我們比較y與卷積層輸出的平方誤差,然後計算梯度來更新卷積核。

#

構造乙個二維卷積層,它具有1個輸出通道和形狀為(1,2)的卷積核

conv2d = nn.conv2d(1,1, kernel_size=(1, 2), bias=false)

#這個二維卷積層使用四維輸入和輸出格式(批量大小、通道、高度、寬度),

#其中批量大小和通道數都為1

x = x.reshape((1, 1, 6, 8))

y = y.reshape((1, 1, 6, 7))

lr = 3e-2 #

學習率for i in range(10):

y_hat =conv2d(x)

l = (y_hat - y) ** 2conv2d.zero_grad()

l.sum().backward()

#迭代卷積核

conv2d.weight.data[:] -= lr *conv2d.weight.grad

print(f'

epoch , loss

')

填充: 防止多層卷積丟失邊緣畫素

步幅:快速降維提高效率

引數舉例:

conv2d = nn.conv2d(1, 1, kernel_size=3, padding=1, stride=2)

conv2d = nn.conv2d(1, 1, kernel_size=(3, 5), padding=(0, 1), stride=(3, 4))

0'>

pytorch學習 構建卷積神經網路

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

卷積神經網路 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。需要對輸入資料體進行零填充,保證輸出和輸入一樣的空間大小 對輸入資料空間進行下取樣 不使用的話,會導致影象邊緣資訊過快地損失掉 沒有人能在一開始就想清楚,只有開始做了,你...