1. 程式人生 > 其它 >深入卷積核

深入卷積核

深入瞭解卷積操作

一、nn.Conv2d() (類式介面) 用法

nn.Conv2d(in_channels, out_channels, kernel_size, stride=1,padding=0, dilation=1, groups=1,bias=True, padding_mode=‘zeros’)

in_channels:輸入通道

out_channels:輸出通道

kernel:卷積核大小,int 或 元組 型別

stride:步長 每次滑動步長,預設1

padding:設定邊界增加值 0 的邊距大小 例:padding = 1,原影象 3*3 → 5*5 外擴一圈0,卷積後大小保持不變。反捲積也通過擴充邊界進行操作。

dilation:對卷積核間距擴充,中間補0

 1 # -*- coding = utf-8 -*-
 2 # @Time : 2021/8/24 19:56
 3 # @Author : Lv
 4 # @File : Kernel.py
 5 # @ Software : PyCharm
 6 import torch
 7 import torch.nn as nn
 8 class Net(nn.Module):
 9     def __init__(self,):
10         super(Net,self).__init__()  # 繼承父類
11         self.conv1 = nn.Conv2d(in_channels=2,out_channels=1,kernel_size=3,stride=1,padding=0) #
大小不變 12 13 def forward(self,x): 14 x = self.conv1(x) 15 Weight = self.conv1.weight.data # 卷積核權重 [1,2,3,3] 16 Bias = self.conv1.bias.data 17 print(Weight) 18 print('Bias',Bias) 19 w1 = Weight[0,0,:,:] # 切片 第一個通道卷積核 20 w2 = Weight[0,1,:,:]
21 print('Num 1',sum(sum(w1))) # 對卷積核1通道加和 3*3引數直接加和 因 輸入圖片 全1 矩陣 可認為不用內積 22 print('Num 2',sum(sum(w2))) # 對卷積核2通道加和 23 w = sum(sum(w1)) + sum(sum(w2)) # 兩通道加和 24 print('Result',w) 25 print('\n卷積',w+Bias) # 加偏置 26 27 return x 28 x = torch.ones(1,2,4,4) 29 print('輸入',x,end='\n') 30 net = Net() 31 print(net(x))