pytorch NLP中的卷積和最大池化

2021-10-13 18:52:32 字數 1970 閱讀 1068

import torch

import torch.nn as nn

# 卷積

torch.manual_seed(6)

x = torch.randn(4,

3,5)

# [batch_size, seq_len, hidden]

x = x.unsqueeze(1)

# [batch_size, channel=1, seq_len, hidden]

conv = nn.conv2d(1,

3,(2

,5))

# [in_channels=1, out_channels=3, 卷積核的尺寸kernel_size=[2,5],2相當於考慮了bigram的資訊, hidden=5]

res = conv(x)

# [4, 3, 2, 1] batch_size=4, out_channels=3, 考慮了seq_len=3的bigram資訊,通過二合一的方式,將seq_len變為了2, 將hidden=5捲成了hidden=1

# 最大池化

res = res.squeeze(3)

# print(res) # [4, 3, 2]

res = f.max_pool1d(res, res.size(2)

).squeeze(2)

#[4,3]

# print(res)

文字與影象處理的比較

針對一句話的文字,向量化後的表現形式為:

[batch_size, channel=1, seq_len, hidden]

seq_len :一句話的長度

hidden :詞向量的維度

影象的表現形式為:

[ batch_size, channels, height, width ]

batch_size :乙個批次中的樣本數量

channels :通道數,也就是當前層的深度 1

height : 的高 7

width : 的寬 3

注:影象的輸出通道數相當於卷積核的數量

# 池化前-[4,3,2]

tensor([[

[-0.0675,-

0.5686],

[1.1370

,1.0989],

[0.2096

,1.1376]]

,[[0.6315

,1.4087],

[-0.2241

,0.1478],

[-0.2324

,0.1870]]

,[[-

1.4967,-

0.3137],

[0.8790

,0.5648],

[0.4510

,0.7341]]

,[[0.0598

,1.3523],

[-0.4570,-

0.2285],

[-0.2848

,0.7552]]

])# 池化並壓縮後-[4,3]

# 一維最大池化,此時選擇的是原行向量中最大的乙個數值,如[-0.0675, -0.5686]中的-0.0675,[-0.2848, 0.7552]中的0.7552

tensor([[

-0.0675

,1.1370

,1.1376],

[1.4087

,0.1478

,0.1870],

[-0.3137

,0.8790

,0.7341],

[1.3523,-

0.2285

,0.7552]]

)

參考鏈結

卷積和反卷積

n image h 2 pad h kernel h stride h 1 image w 2 pad w kernel w stride w 1 image h 輸入影象的高度 image w 輸入影象的寬度 pad h 在輸入影象的高度方向兩邊各增加pad h個單位長度 因為有兩邊,所以乘以2 ...

卷積和反卷積(deconv)的正向

提取區域性區域內的特徵 輸入 輸出feature 長 寬 的計算 區域性連線 對輸入的部分區域提取 影象資料在空間上與距離較近的區域有關,與距離較遠的基本無關,所以神經元只需接受區域性輸入 權重共享 有多個卷積核,每個生成乙個新的feature map 影象 新的feature map 圖形 上的每...

迴圈卷積和線性卷積的關係

迴圈卷積和線性卷積的關係 一般訊號處理濾波器 時域資料 與 濾波器係數的線性卷積,但卷積的運算量比較大,所以用頻域的相乘來替代時域卷積,而頻域的相乘等於時域迴圈卷積,所以要有乙個迴圈卷積和線性卷積轉換的過程,如下matlab例子 x 3 2 1 2 5 y 7 1 8 5 1 n length x ...