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 ...