在第 7 節(jié)中,我們研究了使用二維 CNN 處理二維圖像數(shù)據(jù)的機制,這些機制應(yīng)用于相鄰像素等局部特征。盡管最初是為計算機視覺設(shè)計的,但 CNN 也廣泛用于自然語言處理。簡單地說,只需將任何文本序列視為一維圖像即可。通過這種方式,一維 CNN 可以處理局部特征,例如n- 文本中的克。
在本節(jié)中,我們將使用textCNN模型來演示如何設(shè)計用于表示單個文本的 CNN 架構(gòu) ( Kim, 2014 )。與圖 16.2.1使用帶有 GloVe 預(yù)訓(xùn)練的 RNN 架構(gòu)進行情感分析相比,圖 16.3.1的唯一區(qū)別在于架構(gòu)的選擇。
16.3.1。一維卷積
在介紹模型之前,讓我們看看一維卷積是如何工作的。請記住,這只是基于互相關(guān)運算的二維卷積的特例。
如圖 16.3.2所示,在一維情況下,卷積窗口在輸入張量上從左向右滑動。在滑動過程中,輸入子張量(例如,0和1在 圖 16.3.2中)包含在某個位置的卷積窗口和內(nèi)核張量(例如,1和2在 圖 16.3.2中)按元素相乘。這些乘法的總和給出單個標(biāo)量值(例如, 0×1+1×2=2在圖 16.3.2中)在輸出張量的相應(yīng)位置。
我們在以下函數(shù)中實現(xiàn)一維互相關(guān) corr1d
。給定一個輸入張量X
和一個內(nèi)核張量 K
,它返回輸出張量Y
。
我們可以從 圖 16.3.2構(gòu)造輸入張量X
和核張量來驗證上述一維互相關(guān)實現(xiàn)的輸出。K
tensor([ 2., 5., 8., 11., 14., 17.])
對于任何具有多個通道的一維輸入,卷積核需要具有相同數(shù)量的輸入通道。然后對于每個通道,對輸入的一維張量和卷積核的一維張量進行互相關(guān)運算,將所有通道的結(jié)果相加得到一維輸出張量。圖 16.3.3顯示了具有 3 個輸入通道的一維互相關(guān)運算。
我們可以對多個輸入通道進行一維互相關(guān)運算,并驗證 圖 16.3.3中的結(jié)果。
def corr1d_multi_in(X, K):
# First, iterate through the 0th dimension (channel dimension) of `X` and
# `K`. Then, add them together
return sum(corr1d(x, k) for x, k in zip(X, K))
X = torch.tensor([[0, 1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 7],
[2, 3, 4, 5, 6, 7, 8]])
K = torch.tensor([[1, 2], [3, 4], [-1, -3]])
corr1d_multi_in(X, K)
tensor([ 2., 8., 14., 20., 26., 32.])
def corr1d_multi_in(X, K):
# First, iterate through the 0th dimension (channel dimension) of `X` and
# `K`. Then, add them together
return sum(corr1d(x, k) for x, k in zip(X, K))
X = np.array([[0, 1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 7],
[2, 3, 4, 5, 6, 7, 8]])
K = np.array([[1, 2], [3, 4], [-1, -3]])
corr1d_multi_in(X, K)
array([ 2., 8., 14., 20., 26., 32.])
請注意,多輸入通道一維互相關(guān)等同于單輸入通道二維互相關(guān)。為了說明,圖 16.3.3中的多輸入通道一維互相關(guān)的等效形式是圖 16.3.4中的單輸入通道二維互相關(guān) ,其中卷積核必須與輸入張量相同。
評論
查看更多