日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lstm结构图_神经网络——单层LSTM

發布時間:2025/4/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lstm结构图_神经网络——单层LSTM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LSTM神經網絡全稱長短時記憶神經網絡(Long Short-term Memory),是一種特殊的RNN(Recurrent Neural Network)。下面從一下幾個部分對LSTM進行介紹。

  • LSTM–cell、gate的基本概念
  • LSTM內部結構
  • 基于Tensorflow的LSTM實現代碼解析
  • LSTM推斷在FPGA實現思路

1. 基本概念

1.1 cell

Cell是構成RNN神經網絡的基本單元,Cell能夠記憶之前輸入的狀態。LSTM是RNN的一種變種,解決了RNN在訓練過程中梯度爆炸和梯度消失的問題。在LSTM中保持了Cell的概念,但與RNN不同的是,LSTM中Cell記憶的是兩種狀態:1)記憶之前輸入的狀態c(Tensorflow中稱c-state);2)當前輸出狀態h(Tensorflow中稱m-state)。

cell結構圖

LSTM的輸入是按照時間序列分步進行輸入,在每個時間步(Timestep)cell都進行狀態更新。在t時刻,cell的記憶狀態

表示Cell記憶t-1以及以前時刻的輸入狀態, 表示t-1時刻Cell的輸出。于是當多個Cell邏輯連接在一起時,就組成了一個完整的LSTM推斷過程,如下圖。在一輪LSTM推斷中,LSTM輸入序列為 ,Timestep=t。此時LSTM輸出為 ,然后輸入新的序列進行下一輪的推斷。

LSTM推斷過程圖


1.2 門

門(Gate)是將LSTM與RNN區分開來的一個重要概念,cell更新狀態靠的是門。在cell中,有三個門:遺忘門(Forget Gate),輸入門(Input Gate)和輸出門(Output Gate)。門的作用是控制數據范圍,接下來會圍繞下面三個問題對門和cell結構進行解釋,1)門的輸入數據是什么;2)門的輸出數據是什么;3)門控制誰的數據范圍。

1)門的輸入數據是什么?

門的輸入數據是前一個時刻cell的輸出

和當前的輸入 。

2)門的輸出數據是什么?

門的輸入數據乘以權值矩陣,然后經過激活函數,即為門的輸出,門輸出的數據范圍與激活函數的類型有關。用函數表示:

, 是激活函數,常用sigmoid函數, 表示門的輸入數據, 表示權值和偏置(與神經元中的概念是一致的)。

3)門控制誰的數據范圍?

  • 遺忘門:之前的狀態 會對當前cell輸出有影響,遺忘門的作用是對之前的狀態進行部分遺忘。(過去不開心的事情該忘記的就忘記吧==)
  • 輸入門:對當前cell的輸入的數據進行控制。(選擇性吸收?)
  • 輸出門:對當前cell的輸出的數據進行控制。(誰還不能留點小秘密..)

Gate結構

2. LSTM結構

LSTM是由cell構成,而cell則是由gate構成。下面來看看gate是怎么構成cell的吧!

好吧...圖是我不知道在哪copy的..懶得畫了
  • forget gate:
  • input gate :
  • new cell :
  • output gate:

前一個時刻cell的輸出和當前時刻序列的輸入拼接作為各個門的輸入,拼接后乘以不同權值矩陣(加上偏置)可以得到不同的門:遺忘門、輸入門和輸出門。上一時刻cell的記憶狀態與遺忘門做element-wise(對應元素相乘),表示遺忘之前時刻的部分信息;輸入門與new cell做element-wise,表示加入當前時刻的部分信息;經過遺忘和加入新的記憶,得到cell新的記憶狀態。最后與輸出門做element-wise,將cell部分信息作為cell的輸出。

3. 代碼實現

github上有比較好的基于tensorflow實現lstm的例子,對其中部分代碼做一些說明和拓展。

lstm?github.comlstm_cell = tf.contrib.rnn.BasicLSTMCell(n_hidden) 1) n_hidden: 表示Cell中h的維度 2) lstm_cell.weights[0]: 獲取lstm內部權值, 按照i,j,f,o順序 3) lstm_cell.weights[1]: 獲取偏置outputs, states = tf.contrib.rnn.static_rnn(lstm_cell, x, dtype=tf.float32,sequence_length=seqlen) 1) outputs: 每個timestep輸出一組outputs, 分別表示每個時間步Cell的輸出h 2) states: 分為s-state和m-state, 分別表示最后一個時間步Cell的c和h第一步解析: 1. c = np.array(10*[0]) 2. x1 = np.array(test_data[0,0]) 3. h1 = np.array(10*[0]) 4. xh1 = np.append(x1,h1,axis=0) 5. concat = np.dot(xh1,lstm_kernel) + lstm_bias 6. i, j, f, o = np.split(concat,4) 7. new_c = (c*sigmoid(f + 1.0) + sigmoid(i)*mytanh(j)) 8. new_h = (mytanh(new_c)*sigmoid(o))第一步解析說明: 1-3:Cell初始狀態輸入 4:[x,h] 5-6:計算隔各個門,得到i,j,f,o(j是new cell) 7-8:Cell更新c,h

4. FPGA實現

加速計算一般是加速推斷部分,而訓練是在CPU/GPU中進行。將各個權值數據范圍弄清楚,設計各個模塊就比較簡單了。這里記錄一下主要模塊,在FPGA中實現推斷部分需要的計算模塊:矩陣計算、存儲控制、cell結構。

  • 矩陣計算:在乘法器資源充足的條件下,可以采用并行方式計算,先計算向量相乘再累加,然后進行模塊例化,實現矩陣計算。
  • Cell結構:實現單個cell邏輯,激活函數采用分段非線性逼近,激活函數的處理對最終精度有很大影響。
  • 存儲控制:控制矩陣計算和cell運算的數據流。

lstm實現結構

需要注意的點:

  • 在仿真時需要弄清權值的數據范圍,以及各個輸入、輸出和中間變量的數據范圍,對進行數據定點化處理,確定數據位寬。
  • 為了降低延時,可以將數據處理速率提升至數據輸入速率的n倍(需要計算每次運算需要多少個時鐘)。

總結

以上是生活随笔為你收集整理的lstm结构图_神经网络——单层LSTM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。