<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > Python 實(shí)現注意力機制

Python 實(shí)現注意力機制

發(fā)布人:AI科技大本營(yíng) 時(shí)間:2021-10-18 來(lái)源:工程師 發(fā)布文章

引言

隨著(zhù)信息技術(shù)的發(fā)展,海量繁雜的信息向人們不斷襲來(lái),信息無(wú)時(shí)無(wú)刻充斥在四周。然而人類(lèi)所能接收的信息則是有限的,科研人員發(fā)現人類(lèi)視覺(jué)系統在有限的視野之下卻有著(zhù)龐大的視覺(jué)信息處理能力。在處理視覺(jué)數據的初期,人類(lèi)視覺(jué)系統會(huì )迅速將注意力集中在場(chǎng)景中的重要區域上,這一選擇性感知機制極大地減少了人類(lèi)視覺(jué)系統處理數據的數量,從而使人類(lèi)在處理復雜的視覺(jué)信息時(shí)能夠抑制不重要的刺激,并將有限的神經(jīng)計算資源分配給場(chǎng)景中的關(guān)鍵部分,為更高層次的感知推理和更復雜的視覺(jué)處理任務(wù)(如物體識別、場(chǎng)景分類(lèi)、視頻理解等)提供更易于處理且更相關(guān)的信息。借鑒人類(lèi)視覺(jué)系統的這一特點(diǎn),科研人員提出了注意力機制的思想。對于事物來(lái)說(shuō)特征的重要性是不同的,反映在卷積網(wǎng)絡(luò )中即每張特征圖的重要性是具有差異性的。注意力機制的核心思想是通過(guò)一定手段獲取到每張特征圖重要性的差異,將神經(jīng)網(wǎng)絡(luò )的計算資源更多地投入更重要的任務(wù)當中,并利用任務(wù)結果反向指導特征圖的權重更新,從而高效快速地完成相應任務(wù)。

近兩年,注意力模型被廣泛使用在自然語(yǔ)言處理、圖像識別、語(yǔ)音識別等各種不同類(lèi)型的深度學(xué)習任務(wù)當中。

如下圖所示,顏色越深的地方表示關(guān)注度越大,即注意力的權重越大。

1.png

故本項目將通過(guò)搭建 BiLSTM 的注意力機制模型來(lái)實(shí)現對時(shí)間數據的格式轉換,實(shí)現的最終結果如下:

2.png

注意力機制介紹

注意力機制最初在2014年作為RNN中編碼器-****框架的一部分來(lái)編碼長(cháng)的輸入語(yǔ)句,后續被廣泛運用在RNN中。例如在機器翻譯中通常是用一個(gè) RNN編碼器讀入上下文,得到一個(gè)上下文向量,一個(gè)RNN****以這個(gè)隱狀態(tài)為起始狀態(tài),依次生成目標的每一個(gè)單詞。但這種做法的缺點(diǎn)是:無(wú)論之前的上下文有多長(cháng),包含多少信息量,最終都要被壓縮成一個(gè)幾百維的向量。這意味著(zhù)上下文越大,最終的狀態(tài)向量會(huì )丟失越多的信息。輸入語(yǔ)句長(cháng)度增加后,最終****翻譯的結果會(huì )顯著(zhù)變差。事實(shí)上,因為上下文在輸入時(shí)已知,一個(gè)模型完全可以在解碼的過(guò)程中利用上下文的全部信息,而不僅僅是最后一個(gè)狀態(tài)的信息,這就是注意力機制的基礎思想。

1.1

基本方法介紹

當前注意力機制的主流方法是將特征圖中的潛在注意力信息進(jìn)行深度挖掘,最常見(jiàn)的是通過(guò)各種手段獲取各個(gè)特征圖通道間的通道注意力信息與特征圖內部像素點(diǎn)之間的空間注意力信息,獲取的方法也包括但不僅限于卷積操作,矩陣操作構建相關(guān)性矩陣等,其共同的目的是更深層次,更全面的獲取特征圖中完善的注意力信息,于是如何更深的挖掘,從哪里去挖掘特征圖的注意力信息,將極有可能會(huì )成為未來(lái)注意力方法發(fā)展的方向之一。

目前,獲取注意力的方法基本基于通道間的注意力信息、空間像素點(diǎn)之間的注意力信息和卷積核選擇的注意力信息,是否能夠從新的方向去獲取特征圖更豐富的注意力信息,或者以新的方式或手段去獲取更精準的注意力信息也是未來(lái)需要關(guān)注的一個(gè)重點(diǎn)。

模型實(shí)驗

2.1

數據處理

讀取數據集json文件,并將每一個(gè)索引轉換為對應的one-hot編碼形式,并設置輸入數據最大長(cháng)度為41。代碼如下:

with open('data/Time Dataset.json','r') as f:
    dataset = json.loads(f.read())
with open('data/Time Vocabs.json','r') as f:
    human_vocab, machine_vocab = json.loads(f.read())
human_vocab_size = len(human_vocab)
machine_vocab_size = len(machine_vocab)
m = len(dataset)
def preprocess_data(dataset, human_vocab, machine_vocab, Tx, Ty):
    m = len(dataset)
    X = np.zeros([m, Tx], dtype='int32')
    Y = np.zeros([m, Ty], dtype='int32')
    for i in range(m):
        data = dataset[i]
        X[i] = np.array(tokenize(data[0], human_vocab, Tx))
        Y[i] = np.array(tokenize(data[1], machine_vocab, Ty))
    Xoh = oh_2d(X, len(human_vocab))
    Yoh = oh_2d(Y, len(machine_vocab))
    return (X, Y, Xoh, Yoh)

3.png

2.2 網(wǎng)絡(luò )模型設置

其中Tx=41為序列的最大長(cháng)度,Ty=5為序列長(cháng)度,layer1 size設置為32為網(wǎng)絡(luò )層,1ayer2 size=64為注意力層,human vocab size=41表述human時(shí)間會(huì )用到41個(gè)不同的字符,machine vocab size=11表述machine時(shí)間會(huì )用到11個(gè)不同的字符。這里雙向LSTM作為Encoder編碼器,全連接層作為Decoder****。

代碼如下:

layer3 = Dense(machine_vocab_size, activation=softmax)
def get_model(Tx, Ty, layer1_size, layer2_size, x_vocab_size, y_vocab_size):
    X = Input(shape=(Tx, x_vocab_size))
    a1 = Bidirectional(LSTM(layer1_size, return_sequences=True), merge_mode='concat')(X)
    a2 = attention_layer(a1, layer2_size, Ty)
    a3 = [layer3(timestep) for timestep in a2]
    model = Model(inputs=[X], outputs=a3)
    return model

4.png

2.3

注意力網(wǎng)絡(luò )

為了達到反饋更新的作用,注意力網(wǎng)絡(luò )在每個(gè)輸出時(shí)間步上關(guān)注輸入的某些部分。_attention_表示哪些輸入與當前輸出步驟最相關(guān)。如果一個(gè)輸入步驟是相關(guān)的,那么它的注意力權重為1,否則為0。_context_是“輸入的摘要”。全局定義部分注意力層,以便每個(gè)注意力都有相同的層次。代碼如下:

5.png

def one_step_of_attention(h_prev, a):
    h_repeat = at_repeat(h_prev)
    i = at_concatenate([a, h_repeat])
    i = at_dense1(i)
    i = at_dense2(i)
    attention = at_softmax(i)
    context = at_dot([attention, a])
    return context
def attention_layer(X, n_h, Ty):
    h = Lambda(lambda X: K.zeros(shape=(K.shape(X)[0], n_h)))(X)
    c = Lambda(lambda X: K.zeros(shape=(K.shape(X)[0], n_h)))(X)
    at_LSTM = LSTM(n_h, return_state=True)
    output = []
    for _ in range(Ty):
        context = one_step_of_attention(h, X)
        h, _, c = at_LSTM(context, initial_state=[h, c])
        output.append(h)
    return output

2.4 模型訓練評估

通過(guò)調用get_model函數獲取整個(gè)模型架構,并使用adam優(yōu)化器迭代更新,創(chuàng )建交叉熵損失函數最后訓練和評估。

代碼如下:

model = get_model(Tx, Ty, layer1_size, layer2_size, human_vocab_size, machine_vocab_size)
opt = Adam(lr=0.05, decay=0.04, clipnorm=1.0)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
outputs_train = list(Yoh_train.swapaxes(0,1))
model.fit([Xoh_train], outputs_train, epochs=30, batch_size=100)
outputs_test = list(Yoh_test.swapaxes(0,1))
score = model.evaluate(Xoh_test, outputs_test) 
print('Test loss: ', score[0])

圖片

完整代碼:

鏈接:

https://pan.baidu.com/s/1d9delZAQ7gepH9T9um4dMQ

提取碼:a2ed

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>