tensorflow 循環神經網絡RNN

tensorflow 循環神經網絡RNN

96

AfterlifeYeah

2017.04.02 17:11* 字數 54 閱讀 6034評論 0喜歡 2

  • 在 tensorflow 中實現 LSTM 結構的循環神經網絡的前向傳播過程,即使用 BasicLSTMCell
# 定義一個 LSTM 結構,LSTM 中使用的變量會在該函數中自動被聲明
lstm = tf.contrib.rnn.BasicLSTMCell(lstm_hidden_size)

# 將 LSTM 中的狀態初始化爲全 0  數組,batch_size 給出一個 batch 的大小
state = lstm.zero_state(batch_size, tf.float32)

# 定義損失函數
loss = 0.0

# num_steps 表示最大的序列長度
for i in range(num_steps):
  # 在第一個時刻聲明 LSTM 結構中使用的變量,在之後的時刻都需要服用之前定義好的變量
  if i>0:
    tf.get_variable_scope().reuse_variables()
  # 每一步處理時間序列中的一個時刻。將當前輸入(current_input)和前一時刻狀態(state)傳入定義的 LSTM 結構就可以得到當前 LSTM 結構的輸出 lstm_output 和更新後的狀態 state
  lstm_output, state = lstm(current_input, state)

  # 將當前時刻 LSTM 結構的輸出傳入一個全連接層得到最後的輸出
  final_output = fully_connected(lstm_output)

  # 計算當前時刻輸出的損失
  loss += calc_loss(final_output, expected_output)
  • 在 tensorflow中實現雙向RNN(BiRNN),使用 MultiRNNCell
lstm = tf.contrib.rnn.BasicLSTMCell(lstm_hidden_size)
# 使用 MultiRNNCell 類實現深層循環網絡中每一個時刻的前向傳播過程,number_of_layers 表示有多少層
stacked_lstm = tf.contrib.rnn.MultiRNNCell([lstm] * number_of_layers)

state = stacked_lstm.zero_state(batch_size, tf.float32)

for i in range(len(num_steps)):
  if i>0:
    tf.get_variable_scope().reuse_variables()
  stacked_lstm_output, state = stacked_lstm(current_input, state)
  final_output = fully_connected(stacked_lstm_output)
  loss += calc_loss(final_output, expected_output)
  • 循環神經網絡 RNN 中的 dropout, 使用 DropoutWrapper
# 定義 LSTM 結構
lstm = tf.contrib.rnn.BasicLSTMCell(lstm_hidden_size)

# 使用 DropoutWrapper 類來實現 dropout 功能,input_keep_prob 控制輸出的 dropout 概率
dropout_lstm = tf.contrib.rnn.DropoutWrapper(lstm, input_keep_prob=0.5)

stacked_lstm = tf.contrib.rnn.MultiRNNCell([dropout_lstm] * number_of_layers)

小禮物走一走,來簡書關注我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章