iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 21
0

零、引言

前兩篇的暴力系列看起來非常的有(絕)趣(望),此時我萌生的想法有兩個

    1. 變更dataset的處理
    1. 變更LSTM的配置

其中,如果想要改變dataset的處理方式,最好的方法就是直接將多餘重複的部分直接去掉。這絕對是一個可行的方式,在之後的兩天內,我應該會使用這個方式試看看。 另一個為什麼提到LSTM的配置呢? 因為我在看RNN的基礎架構的時候,所接收到的是對於time stamp,它可以是「沒有限制」的,那麼為什麼我們在使用LSTM layers的時候,卻是一定要有time stamp的設置? 所以我們今天來稍微踩踩keras-LSTM的坑吧!

一、KerasRecurrent Layers 種類

1、類別

類別 繼承
RNN Layer
SimpleRNN RNN
GRU RNN
LSTM RNN
ConvLSTM2D RNN
ConvLSTM2DCell Layer
SimpleRNNCell Layer
GRUCell Layer
LSTMCell Layer
CuDNNGRU _CuDNNRNN
CuDNNLSTM _CuDNNRNN

我特別列出繼承的類是因為想要更清楚了解他們底層的運作

2、RNN類別的特殊功能

此為RNN原本的隱藏可選input,由**kwargs傳入

  • initial_state
    • 可以直接指定RNNstate
    • 但是可以用RNNreset_states方法透過輸入來更改狀態
  • constants
    • 簡單來說是為了Attention而設的機制,但細節我不是很清楚

二、cell? layers?

其實當初在看這部分的時候就有疑問,為什麼會有分LSTMLSTMCell?

  • cell
    • 只接收單個輸入、過去的state然後輸出新的output和新的state
    • 其並沒有包裝好序列輸入的迭代過程,但可以實現跳躍狀態
  • layers
    • 接收包含已經固定好的time stamp個數
    • 包裝好迭代過程,簡單使用,但相對靈活度降低

喔挖嗚~ 說認真,我原本想要嘗試使用輸入time stamp1LSTM layers來建構我認識的RNN模型,現在看來使用cell好像就可以解決啦?

tensorflow 1.4 core裡面是這麼描述RNN layerscell之間的關係的

The cell is the inside of the for loop of a RNN layer. Wrapping a cell inside a tf.keras.layers.RNN layer gives you a layer capable of processing batches of sequences, e.g. RNN(LSTMCell(10))

也就是說,當你使用Cell建構後,還是可以使用RNN包起來幫你處理整串資料,但這句話也表示了你還是用layers就好吧! 省得麻煩 (~ 是的,我應該接收到了

三、小總結

其實在理解RNN系列的過程滿累的,這次並沒有把坑踩好踩滿,我有查了怎麼建構雙向LSTM、怎麼使用reset_states()、怎麼「跨批次處理」資料,但我認為無法把整理寫得好,今天小提一下並記錄LSTM中的一些細節,之後如果有用到再補上XD

參考

Keras-Recurrent Layers


上一篇
暴力輸入資料實測-單純的我被嘲諷了<補>
下一篇
暴力拔掉do_nothing類別-期待的我被侮辱了 <補>
系列文
AI可以分析股票嗎?30

尚未有邦友留言

立即登入留言