簡單介紹numpy實現RNN原理實現
導讀 |
這篇文章主要介紹了numpy實現RNN原理實現,文中透過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
|
首先說明程式碼只是幫助理解,並未寫出梯度下降部分,預設引數已經被固定,不影響理解。程式碼主要實現RNN原理,只使用numpy庫,不可用於GPU加速。
import numpy as np class Rnn(): def __init__(self, input_size, hidden_size, num_layers, bidirectional=False): self.input_size = input_size self.hidden_size = hidden_size self.num_layers = num_layers self.bidirectional = bidirectional def feed(self, x): ''' :param x: [seq, batch_size, embedding] :return: out, hidden ''' # x.shape [sep, batch, feature] # hidden.shape [hidden_size, batch] # Whh0.shape [hidden_size, hidden_size] Wih0.shape [hidden_size, feature] # Whh1.shape [hidden_size, hidden_size] Wih1.size [hidden_size, hidden_size] out = [] x, hidden = np.array(x), [np.zeros((self.hidden_size, x.shape[1])) for i in range(self.num_layers)] Wih = [np.random.random((self.hidden_size, self.hidden_size)) for i in range(1, self.num_layers)] Wih.insert(0, np.random.random((self.hidden_size, x.shape[2]))) Whh = [np.random.random((self.hidden_size, self.hidden_size)) for i in range(self.num_layers)] time = x.shape[0] for i in range(time): hidden[0] = np.tanh((np.dot(Wih[0], np.transpose(x[i, ...], (1, 0))) + np.dot(Whh[0], hidden[0]) )) for i in range(1, self.num_layers): hidden[i] = np.tanh((np.dot(Wih[i], hidden[i-1]) + np.dot(Whh[i], hidden[i]) )) out.append(hidden[self.num_layers-1]) return np.array(out), np.array(hidden) def sigmoid(x): return 1.0/(1.0 + 1.0/np.exp(x)) if __name__ == '__main__': rnn = Rnn(1, 5, 4) input = np.random.random((6, 2, 1)) out, h = rnn.feed(input) print(f'seq is {input.shape[0]}, batch_size is {input.shape[1]} ', 'out.shape ', out.shape, ' h.shape ', h.shape) # print(sigmoid(np.random.random((2, 3)))) # # element-wise multiplication # print(np.array([1, 2])*np.array([2, 1]))
到此這篇關於numpy實現RNN原理實現的文章就介紹到這了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2767687/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單介紹NMS的實現方法
- 簡單易懂的 Go 泛型使用和實現原理介紹Go泛型
- RPC模式的介紹以及簡單的實現RPC模式
- 簡單介紹SpringMVC RESTFul實現列表功能SpringMVCREST
- vue 實現原理及簡單示例實現Vue
- 簡單實現vuex原理Vue
- 單目測距的基本介紹和實現原理
- golang實現常用集合原理介紹Golang
- 簡單介紹Go 字串比較的實現示例Go字串
- 簡單介紹VBS 批次Ping的專案實現
- 簡單介紹pytorch中log_softmax的實現PyTorch
- 簡單的實現vue原理Vue
- 簡單的實現React原理React
- Redux 原理和簡單實現Redux
- MapReduce原理及簡單實現
- 簡單介紹python中的單向連結串列實現Python
- Android通過輔助功能實現搶微信紅包原理簡單介紹Android
- RSA加密演算法簡單介紹以及python實現加密演算法Python
- 簡單介紹Android自定義View實現時鐘功能AndroidView
- 防抖原理以及簡單實現
- async/await 原理及簡單實現AI
- 簡單、好懂的Svelte實現原理
- rxjs Observable filter Operator 的實現原理介紹JSFilter
- Flink sql實現原理及Apache Calcite介紹SQLApache
- python實現之 K-means演算法簡單介紹Python演算法
- 簡單介紹Lombok使用@Tolerate實現衝突相容問題Lombok
- 簡單介紹Angular單元測試之事件觸發的實現Angular事件
- 《機器學習Python實現_10_10_整合學習_xgboost_原理介紹及迴歸樹的簡單實現》機器學習Python
- OutputStreamWriter介紹&程式碼實現和InputStreamReader介紹&程式碼實現
- virtual-dom原理與簡單實現
- 分散式鎖簡單入門以及三種實現方式介紹分散式
- 簡單介紹vue3.x 使用jsplumb實現拖拽連線VueJS
- 簡單介紹android實現可以滑動的平滑曲線圖Android
- 簡單介紹Vue實現滑鼠懸浮切換圖片srcVue
- 簡單介紹shell中的curl網路請求的實現
- 簡單介紹Pytorch實現WGAN用於動漫頭像生成PyTorch
- RNN的PyTorch實現RNNPyTorch
- tornado原理介紹及非同步非阻塞實現方式非同步