溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何分析pytorch的一維卷積nn.Conv1d

發(fā)布時間:2021-12-04 18:38:44 來源:億速云 閱讀:538 作者:柒染 欄目:大數(shù)據(jù)

如何分析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 tupleoptional) - 卷積步長,默認(rèn)為1

  • padding (int or tupleoptional)- 輸入的每一條邊補充0的層數(shù),默認(rèn)為0

  • dilation(int or tuple, `optional``) – 卷積核元素之間的間距,默認(rèn)為1

  • groups(intoptional) – 從輸入通道到輸出通道的阻塞連接數(shù)

  • bias(booloptional) - 如果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)知識。

向AI問一下細(xì)節(jié)

免責(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)容。

AI