發現LSTM其實並沒有想像中的效果,在學弟的提議下發現了不少人在識別圖片/影片時都會使用CNN+LSTM的技術,因此嘗試寫寫看
CNN+LSTMs當初是用來希望可以解決下述等問題:
我們也可以將可處理的問題,整理成三種類型:
而CNN+LSTM也可以稱為LRCN (long-term recurrent convolutional network),意旨在LSTM前面接上一CNN。
因為該模型是要生成對圖像的文字描述,所以關鍵就是我們需要一個已經train好的CNN,而該CNN是訓練來分類圖片現在我們可以將它用來提取描述所需要的說明
該架構也可以用來處理自然語言的相關處理,使用CNN做為特徵提取氣,並使用LSTM來處理一段聲音和文字類型的input data
講了這麼多,簡而言之,該架構適用於下述的情況:
直接使用Keras裡面的CNN和LSTM,並將CNN放在一層的LSTM前面
文章中建議我們可以將該架構直接想成兩個子部分:
這邊的CNN先假設input為2D的圖片,因此使用了2D-CNN
且在此範例當中input為10*10 pixel images with 1 channel
CNN一次只能處理一張圖片,但我們現在需要處理是一連串的圖片,所以我們在這使用處理時序性的的LSTM
CNN可以使用已經訓練好的模型(像是VGG)來提取圖片裡面的特徵。也可以來自LSTM的backprpogation error來訓練CNN
而在CNN+LSTM的架構當中,我們會希望CNN處理單筆資料,LSTM處理時序性資料。所以我們要想辦法允許CNN一次只收一張圖片,並且依照連續的時間段傳送給LSTM。
如果想要達成上述的效果,我們可以使用TimeDistributed layer將做好的CNN包裝起來,把模型加進該layer就可以。因為該layer的用意就是將同時輸出的data包裝成
上述已經清楚表達了CNN和LSTM要怎麼處理了,我們現在將他合起來八~
有兩種分法: