欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

F.conv2d?pytorch卷積計算方式

 更新時間:2023年02月21日 09:39:34   作者:wanghua609  
這篇文章主要介紹了F.conv2d?pytorch卷積計算方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

F.conv2d pytorch卷積計算

Pytorch里一般小寫的都是函數(shù)式的接口,相應的大寫的是類式接口。

函數(shù)式的更加low-level一些,如果不需要做特別復雜的配置只需要用類式接口就夠了。

可以這樣理解

nn.Conved是2D卷積層,而F.conv2d是2D卷積操作。

import torch
from torch.nn import functional as F
 
"""手動定義卷積核(weight)和偏置"""
w = torch.rand(16, 3, 5, 5)  # 16種3通道的5乘5卷積核
b = torch.rand(16)  # 和卷積核種類數(shù)保持一致(不同通道共用一個bias)
 
"""定義輸入樣本"""
x = torch.randn(1, 3, 28, 28)  # 1張3通道的28乘28的圖像
 
"""2D卷積得到輸出"""
out = F.conv2d(x, w, b, stride=1, padding=1)  # 步長為1,外加1圈padding,即上下左右各補了1圈的0,
print(out.shape)
 
out = F.conv2d(x, w, b, stride=2, padding=2)  # 步長為2,外加2圈padding
print(out.shape)
out = F.conv2d(x, w)  # 步長為1,默認不padding, 不夠的舍棄,所以對于28*28的圖片來說,算完之后變成了24*24
print(out.shape)
 

在DSSINet發(fā)現(xiàn)又用到了空洞卷積dilated convolution

mu1 = F.conv2d(img1, window , padding=padd, dilation=dilation, groups=channel)

Dilated/Atrous convolution或者是convolution with holes從字面上就很好理解,是在標準的convolution map里注入空洞,以此來增加感受野reception field。

相比原來的正常卷積,空洞卷積多了一個超參數(shù)dilation rate,指的是kernel的間隔數(shù)量(正常的卷積是dilation rate=1)

正常圖像的卷積為

空洞卷積為

現(xiàn)在我們再來看下卷積本身,并了解他背后的設計直覺,以下主要探討空洞卷積在語義分割(semantic segmentation)的應用。

卷積的主要問題

1、up-sampling/pooling layer(e.g. bilinear interpolation) is deterministic(not learnable)

2、內(nèi)部數(shù)據(jù)結構丟失,空間層級化信息丟失。

3、小物體信息無法重建(假設有4個pooling layer,則任何小于2^4=16 pixel的物體信息將理論上無法重建)

在這樣問題的存在下,語義分割問題一直處于瓶頸期無法再明顯提高精度,而dilated convolution 的設計就良好的避免了這些問題。

對于dilated convolution,我們已經(jīng)可以發(fā)現(xiàn)他的優(yōu)點,即內(nèi)部數(shù)據(jù)結構的保留和避免使用down_sampling這樣的特性。但是完全基于dilated convolution的結構如何設計則是一個新的問題。

pytorch中空洞卷積分為兩類,一類是正常圖像的卷積,另一類是池化時候。

空洞卷積的目的是為了在擴大感受野的同時,不降低圖片分辨率和不引入額外參數(shù)及計算量(一般在CNN中擴大感受野都需要使用S》1的conv或者pooling,導致分辨率降低,不利于segmentation,如果使用大卷積核,確實可以達到增大感受野,但是會引入額外的參數(shù)及計算量)。

F.Conv2d和nn.Conv2d

import torch
import torch.nn.functional as F
# 小括號里面有幾個[]就代表是幾維數(shù)據(jù)
input = torch.tensor([[1,2,0,3,1],
                      [0,1,2,3,1],
                      [1,2,1,0,0],
                      [5,2,3,1,1],
                      [2,1,0,1,1]])

kernel = torch.tensor([[1,2,1],
                       [0,1,0],
                       [2,1,0]])

input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))

# stride代表的是步長的意思,即每次卷積核向左或者向下移動多少步進行相乘
#  因為conv2d的input和weight對應的tensor是[batch,channel,h,w],所以上述才將它們進行reshape
output = F.conv2d(input,kernel,stride=1)
print(output)

output = F.conv2d(input,kernel,stride=2)
print(output)

# padding代表的是向上下左右填充的行列數(shù),里面數(shù)字填寫0
output3 = F.conv2d(input,kernel,stride=1,padding=1)
print(output3)
import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriter

dataset = torchvision.datasets.CIFAR10('./torchvision_dataset', train=False, download=False,
                                       transform=torchvision.transforms.ToTensor())

# 準備好數(shù)據(jù)集就放在dataloader中進行加載
dataloader = DataLoader(dataset, batch_size=64)


# 開始定義一個卷積類
class Zkl(nn.Module):
    def __init__(self):
        super(Zkl, self).__init__()
        self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)

    def forward(self,x):
        x = self.conv1(x)
        return x

writer = SummaryWriter("nn_conv2d")
zkl = Zkl()
# print(zkl)
step = 0
for data in dataloader:
    imgs,target = data
    output = zkl(imgs)
    #print(imgs.shape)
    #print(output.shape)
    writer.add_images('nn_conv2d_input',imgs,step)
    #因為輸出是6個通道,tensorboard無法解析,所以需要reshape三個通道
    output = torch.reshape(output,(-1,3,30,30))
    writer.add_images('nn_conv2d_output',output,step)
    step+=1
writer.close()

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • flask框架實現(xiàn)連接sqlite3數(shù)據(jù)庫的方法分析

    flask框架實現(xiàn)連接sqlite3數(shù)據(jù)庫的方法分析

    這篇文章主要介紹了flask框架實現(xiàn)連接sqlite3數(shù)據(jù)庫的方法,結合實例形式分析了flask框架連接sqlite3數(shù)據(jù)庫的具體操作步驟與相關實現(xiàn)技巧,需要的朋友可以參考下
    2018-07-07
  • python如何實現(xiàn)完全數(shù)

    python如何實現(xiàn)完全數(shù)

    這篇文章主要介紹了python如何實現(xiàn)完全數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Django中數(shù)據(jù)庫的數(shù)據(jù)關系:一對一,一對多,多對多

    Django中數(shù)據(jù)庫的數(shù)據(jù)關系:一對一,一對多,多對多

    今天小編就為大家分享一篇關于Django中數(shù)據(jù)庫的數(shù)據(jù)關系:一對一,一對多,多對多,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • python爬蟲利用selenium實現(xiàn)自動翻頁爬取某魚數(shù)據(jù)的思路詳解

    python爬蟲利用selenium實現(xiàn)自動翻頁爬取某魚數(shù)據(jù)的思路詳解

    這篇文章主要介紹了python爬蟲利用selenium實現(xiàn)自動翻頁爬取某魚數(shù)據(jù)的思路詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 使用FastCGI部署Python的Django應用的教程

    使用FastCGI部署Python的Django應用的教程

    這篇文章主要介紹了使用FastCGI部署Python的Django應用的教程,FastCGI也是被最廣泛的應用于Python框架和服務器連接的模塊,需要的朋友可以參考下
    2015-07-07
  • python實現(xiàn)GATK多線程加速示例

    python實現(xiàn)GATK多線程加速示例

    這篇文章主要為大家介紹了python實現(xiàn)GATK多線程加速示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Python字典取鍵、值對的方法步驟

    Python字典取鍵、值對的方法步驟

    這篇文章主要介紹了Python字典取鍵、值對的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • python fabric實現(xiàn)遠程部署

    python fabric實現(xiàn)遠程部署

    這篇文章主要為大家詳細介紹了 python fabric實現(xiàn)遠程部署,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • pytorch 模擬關系擬合——回歸實例

    pytorch 模擬關系擬合——回歸實例

    今天小編就為大家分享一篇pytorch 模擬關系擬合——回歸實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python進階教程之模塊(module)介紹

    python進階教程之模塊(module)介紹

    這篇文章主要介紹了python進階教程之模塊(module)介紹,本文講解了基礎知識、引用方法、搜索的路徑、模塊包等知識,需要的朋友可以參考下
    2014-08-08

最新評論