您好,登錄后才能下訂單哦!
如何分析pytorch的一維卷積nn.Conv1d,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
in_channels(int
) – 輸入信號的通道。在文本分類中,即為詞向量的維度
out_channels(int
) – 卷積產(chǎn)生的通道。有多少個out_channels,就需要多少個1維卷積
kernel_size(int
or tuple
) - 卷積核的尺寸,卷積核的大小為(k,),第二個維度是由in_channels來決定的,所以實際上卷積大小為kernel_size*in_channels
stride(int
or tuple
, optional
) - 卷積步長,默認(rèn)為1
padding (int
or tuple
, optional
)- 輸入的每一條邊補充0的層數(shù),默認(rèn)為0
dilation(int
or tuple
, `optional``) – 卷積核元素之間的間距,默認(rèn)為1
groups(int
, optional
) – 從輸入通道到輸出通道的阻塞連接數(shù)
bias(bool
, optional
) - 如果bias=True
,添加偏置
在一維卷積里,輸入維度是這樣的[batch_size,seq_len,input_size],其中第一維seq_len充當(dāng)n_channels的角色,但在進行一維卷積之前必須交換seq_len和input_size的順序,所以會是[batch_size,input_size,seq_len],所以第一維input_size充當(dāng)n_channels的角色。而卷積發(fā)生在最后一維上,所以實際上input_size應(yīng)該等于卷積中的in_channels,而seq_len則實際參與計算,計算后的結(jié)果根據(jù)以下公式:
seq_len = ((seq_len + 2 * m.padding[0] - m.dilation[0] * (m.kernel_size[0] - 1) - 1) / m.stride[0] + 1)
舉個例子:
conv1 = nn.Conv1d(in_channels=256,out_channels=100,kernel_size=2) input = torch.randn(32,35,256) # batch_size x text_len x embedding_size -> batch_size x embedding_size x text_len input = input.permute(0,2,1) out = conv1(input) print(out.size())
這里32為batch_size,35為句子最大長度,256為詞向量。
再輸入一維卷積的時候,需要將32*35*256變換為32*256*35,因為一維卷積是在最后維度上掃的,最后out的大小即為:32*100*(35-2+1)=32*100*34
關(guān)于如何分析pytorch的一維卷積nn.Conv1d問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。