search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

用Python實現CNN長短期記憶網路!你也行

圖:pixabay

原文來源:https://machinelearningmastery.com/

作者:Jason Brownlee

「機器人圈」編譯:嗯~阿童木呀、多啦A亮

大家應該都很清楚,諸如圖像這樣的具有空間結構的輸入,是不能用標準的Vanilla LSTM來進行簡單建模的。

卷積神經網路長期短期記憶網路或簡稱CNN LSTM,它是LSTM架構,是專門為諸如圖像或視頻等序列預測問題而設計的LSTM架構。

在這篇文章中,你將了解更多關於用以序列預測的CNN LSTM架構的詳細信息。

閱讀本文之後,你將會知道:

•用於序列預測的CNN LSTM模型架構的發展。

•適合用CNN LSTM模型進行處理的問題類型的示例。

•在Python中如何用Keras實現CNN LSTM架構。

一切準備就緒,開始啟程吧。

CNN LSTM架構

CNN LSTM架構涵蓋了使用卷積神經網路(CNN)層對輸入數據結合LSTM架構進行特徵提取,以支持序列預測。

CNN LSTM被開發用於視覺時間序列預測問題和從圖像序列(例如視頻)生成文本描述的應用。具體來說,問題包括以下幾種:

•行為識別:生成圖像序列中演示的行為的文本描述。

•圖像描述:生成單個圖像的文本描述。

•視頻描述:生成圖像序列的文本描述。

[CNN LSTM]是一類在空間和時間上都具有一定深度的模型,它可以靈活地應用於一系列涉及順序輸入和輸出的視覺任務。

——2015《用於視覺識別和描述的長期循環卷積網路》https://arxiv.org/abs/1411.4389

其實這種架構最初被稱為長期循環卷積網路或LRCN模型,儘管在此次課程中,我們將使用更通用的名稱「CNN LSTM」來指代使用CNN作為前端的LSTM。

該架構主要用於生成圖像的文本描述任務。其中最關鍵的是CNN的使用,它要在一個具有挑戰性的圖像分類任務中進行預訓練,而這個任務被重新定義為用於標題生成問題的特徵提取器。

將CNN用作圖像「編碼器」是很自然的,首先對它進行預訓練,以用於圖像分類任務,並使用最後一個隱藏層作為生成句子的RNN解碼器的輸入。

——2015《展示並講述:神經圖像字幕生成器》(https://arxiv.org/abs/1411.4555)

除此之外,該架構還被用於語音識別和自然語言處理問題,其中CNN用作音頻和文本輸入數據中的LSTM特徵提取器。

這種架構非常適合於以下問題:

•在其輸入中具有空間結構,例如圖像中的2維結構或像素,或者是句子、段落以及文檔中的單詞的1維結構。

•在其輸入中具有時間結構,例如視頻中的圖像順序或文本中的單詞,或者需要在文本描述中生成具有時間結構的輸出,例如文本描述中的單詞。

卷積神經網路長短期記憶網路的網路架構

用keras實現CNN LSTM

我們可以定義一個用Keras聯合訓練的CNN LSTM模型。

關於CNN LSTM的定義可以這樣理解:在前端添加CNN層,然後在輸出端添加具有密集層的LSTM層。

將此架構定義為是由兩個子模型組成的是有幫助的:用於特徵提取的CNN模型和用於在時間步長中解釋特徵的LSTM模型。

讓我們在一個具有二維輸入序列(我們將其假設為圖像)的情境中來理解這兩個子模型。

CNN模型

我們可以定義一個2D卷積網路,由Conv2D和MaxPooling2D層組成,並將其層疊到所需深度的堆疊中。

Conv2D將解釋圖像的快照(例如,小方塊),池化層將合併或抽象解釋。

例如,下面的代碼片段可以讀取具有1個通道(例如黑色和白色)的10×10像素圖像。 Conv2D將以2×2快照讀取圖像,並輸出圖像的一個新的10×10的解釋。MaxPooling2D將將解釋池化為2×2塊,將輸出減少到5×5合併中。打散的層將採取單個5×5映射,並將其轉換為25個元素的向量,為處理其他層做準備,例如用於預測輸出的密度。

這對於圖像分類和其他計算機視覺任務是有意義的。

LSTM模型

以上CNN模型只能處理單個圖像,將其從輸入像素轉換為內部矩陣或向量表示。

我們需要跨多個圖像重複此操作,並允許LSTM使用反向傳播(BPTT)在輸入圖像的內部矢量表示的序列之間建立內部狀態並更新權重。

在使用現有的預編程模型(如VGG)進行圖像特徵提取的情況下,CNN可以被固定。CNN可能沒有受過訓練,我們可能希望通過從多個輸入圖像到CNN模型的LSTM的反向傳播誤差來訓練。

在這兩種情況下,概念上,都存在一個CNN模型和一系列LSTM模型,每個時間步長一個。我們要將CNN模型應用於每個輸入圖像,並將每個輸入圖像的輸出作為單個時間步長傳遞給LSTM。

我們可以通過將整個CNN輸入模型(一層或更多層)纏繞在TimeDistributed層中來實現。該層實現了多次施加相同層或多層的期望結果。在這種情況下,將其多次應用到多個輸入時間步驟,並向LSTM模型輪流提供一系列「圖像解釋」或「圖像特徵」。

我們現在有兩個模型元素:讓我們把它們放在一起

CNN LSTM模型

我們可以通過首先定義CNN層或層,將它們纏繞在TimeDistributed層中,然後定義LSTM和輸出層,從而在Keras中定義CNN LSTM模型。

我們有兩種方法定義模型,它們是等價的,只是品味不同而已。

你可以先定義CNN模型,然後通過將整個CNN層序列纏繞在TimeDistributed層中,將其添加到LSTM模型,如下所示:

另一種代替的方法,也許更容易閱讀的方法是將時間分布圖中的每個層纏繞在CNN模型中,將其添加到主模型中。

第二種方法的好處是,所有層都出現在擬合優度情況簡報中,對目前來說這是最合適的。

當然,你可以根據自己的品味選擇你喜歡的方法。

進一步閱讀

如果你想進一步深入了解,本部分將提供更多關於該主題的資源。

CNN LSTM論文

•《用於視覺識別和描述的長期循環卷積網路2015(https://arxiv.org/abs/1411.4389)

•《展示並講述:神經圖像字幕生成器

2015年(https://arxiv.org/abs/1411.4555)

•《卷積式、長短期記憶、完全連接的深度神經網路2015(https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43455.pdf)

•《字元意識神經語言模型

2015(https://arxiv.org/abs/1508.06615)

•《卷積式LSTM網路:降水預報機器學習方法

2015年(https://arxiv.org/abs/1506.04214)

Keras API

•Conv2D Keras API

•MaxPooling2D Keras API

•Flatten Keras API

•TimeDistributed Keras API

帖子

•用於機器學習的卷積神經網路速成課程(http://machinelearningmastery.com/crash-course-convolutional-neural-networks/)

•LSTM循環神經網路與Keras的Python序列分類(http://machinelearningmastery.com/sequence-classification-lstm-recurrent-neural-networks-python-keras/)



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦