深度學(xué)習(xí)(8)深入理解pytorch的卷積池化及tensor shape的計(jì)算

卷積層

1钾唬、class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

一維卷積層,輸入的尺度是(N, C_in,L_in)树碱,輸出尺度( N,C_out,L_out)的計(jì)算方式:

N為批次北秽,C_in即為in_channels,即一批內(nèi)輸入一維數(shù)據(jù)個(gè)數(shù)综苔,L_in是是一維數(shù)據(jù)基數(shù)

shape:
輸入: (N,C_in,L_in)
輸出: (N,C_out,L_out)
輸入輸出的計(jì)算方式:
L_{out}=floor((L_{in}+2padding-dilation(kernerl_size-1)-1)/stride+1)

更好理解in out_channel,stride,kernal_size之間的關(guān)系

2、class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

二維卷積層, 輸入的尺度是(N, C_in,H,W)逼泣,輸出尺度(N,C_out,H_out,W_out)的計(jì)算方式:

out(N_i, C_{out_j})=bias(C_{out_j})+\sum^{C_{in}-1}{k=0}weight(C{out_j},k)\bigotimes input(N_i,k)

shape:
input: (N,C_in,H_in,W_in)
output: (N,C_out,H_out,W_out)
H_{out}=floor((H_{in}+2padding[0]-dilation[0](kernerl_size[0]-1)-1)/stride[0]+1)

W_{out}=floor((W_{in}+2padding[1]-dilation[1](kernerl_size[1]-1)-1)/stride[1]+1)

理解pytorch的padding策略
再去理解參數(shù)之間的關(guān)系

池化層

1、class torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

對于輸入信號的輸入通道舟舒,提供1維最大池化(max pooling)操作

如果輸入的大小是(N,C,L)拉庶,那么輸出的大小是(N,C,L_out)的計(jì)算方式是:
out(N_i, C_j,k)=max^{kernel_size-1}{m=0}input(N{i},C_j,stride*k+m)

參數(shù):

  • kernel_size(int or tuple) - max pooling的窗口大小
  • stride(int or tuple, optional) - max pooling的窗口移動(dòng)的步長。默認(rèn)值是kernel_size
  • padding(int or tuple, optional) - 輸入的每一條邊補(bǔ)充0的層數(shù)
  • dilation(int or tuple, optional) – 一個(gè)控制窗口中元素步幅的參數(shù)
  • return_indices - 如果等于True秃励,會(huì)返回輸出最大值的序號氏仗,對于上采樣操作會(huì)有幫助
  • ceil_mode - 如果等于True,計(jì)算輸出信號大小的時(shí)候夺鲜,會(huì)使用向上取整皆尔,代替默認(rèn)的向下取整的操作

shape:
輸入: (N,C_in,L_in)
輸出: (N,C_out,L_out)
L_{out}=floor((L_{in} + 2padding - dilation(kernel_size - 1) - 1)/stride + 1

2呐舔、class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

對于輸入信號的輸入通道,提供2維最大池化(max pooling)操作

如果輸入的大小是(N,C,H,W)慷蠕,那么輸出的大小是(N,C,H_out,W_out)和池化窗口大小(kH,kW)的關(guān)系是:
out(N_i, C_j,k)=max^{kH-1}{m=0}max^{kW-1}{m=0}input(N_{i},C_j,stride[0]h+m,stride[1]w+n)

參數(shù):

kernel_size(int or tuple) - max pooling的窗口大小
stride(int or tuple, optional) - max pooling的窗口移動(dòng)的步長珊拼。默認(rèn)值是kernel_size
padding(int or tuple, optional) - 輸入的每一條邊補(bǔ)充0的層數(shù)
dilation(int or tuple, optional) – 一個(gè)控制窗口中元素步幅的參數(shù)
return_indices - 如果等于True,會(huì)返回輸出最大值的序號流炕,對于上采樣操作會(huì)有幫助
ceil_mode - 如果等于True澎现,計(jì)算輸出信號大小的時(shí)候,會(huì)使用向上取整每辟,代替默認(rèn)的向下取整的操作
shape:
輸入: (N,C,H_{in},W_in)
輸出: (N,C,H_out,W_out)
H_{out}=floor((H_{in} + 2padding[0] - dilation[0](kernel_size[0] - 1) - 1)/stride[0] + 1

W_{out}=floor((W_{in} + 2padding[1] - dilation[1](kernel_size[1] - 1) - 1)/stride[1] + 1

nn與nn.functional有什么區(qū)別

需要維持狀態(tài)的時(shí)候剑辫,用nn下的conv
不需要維持狀態(tài)的時(shí)候,用nn.function下的conv
共享一部分參數(shù)的時(shí)候影兽,適合用nn.function揭斧,具體見下文
PyTorch 中,nn 與 nn.functional 有什么區(qū)別

接下來講講shape在network中的存在

Define the neural network that has some learnable parameters (or weights)

class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 3x3 square convolution
        # kernel
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  # 6*6 from image dimension
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # If the size is a square you can only specify a single number
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features

上面是一個(gè)典型的網(wǎng)絡(luò)架構(gòu)例子峻堰,從這個(gè)例子中可以看出讹开,在定義conv的時(shí)候,只輸入了channel的參數(shù)捐名,不存在每個(gè)tensor shape的描述旦万,shape的變化對網(wǎng)絡(luò)并沒有影響。

代碼

import torch
import torch.nn as nn

m=nn.Conv2d(16,33,3,stride=2)
input=torch.randn(20,16,10,10)
output=m(input)
#H=(10-3)/2+1=4
#W=(10-3)/2+1=4
print(output.shape)

輸出

torch.Size([20, 33, 4, 4])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镶蹋,一起剝皮案震驚了整個(gè)濱河市成艘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贺归,老刑警劉巖淆两,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拂酣,居然都是意外死亡秋冰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門婶熬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剑勾,“玉大人,你說我怎么就攤上這事赵颅∷淞恚” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵饺谬,是天一觀的道長捂刺。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么叠萍? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任芝发,我火速辦了婚禮,結(jié)果婚禮上苛谷,老公的妹妹穿的比我還像新娘辅鲸。我一直安慰自己,他們只是感情好腹殿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布独悴。 她就那樣靜靜地躺著,像睡著了一般锣尉。 火紅的嫁衣襯著肌膚如雪刻炒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天自沧,我揣著相機(jī)與錄音坟奥,去河邊找鬼。 笑死拇厢,一個(gè)胖子當(dāng)著我的面吹牛爱谁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孝偎,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼访敌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衣盾?” 一聲冷哼從身側(cè)響起寺旺,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎势决,沒想到半個(gè)月后阻塑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡果复,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年陈莽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片据悔。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡传透,死狀恐怖耘沼,靈堂內(nèi)的尸體忽然破棺而出极颓,到底是詐尸還是另有隱情,我是刑警寧澤群嗤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布菠隆,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骇径。R本人自食惡果不足惜躯肌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望破衔。 院中可真熱鬧清女,春花似錦、人聲如沸晰筛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽读第。三九已至曙博,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怜瞒,已是汗流浹背父泳。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吴汪,地道東北人惠窄。 一個(gè)月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像浇坐,于是被迫代替她去往敵國和親睬捶。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349