MachineLearning(12)- RNN-LSTM-tf.nn.rnn_cell

RNN-LSTM

  • 1.RNN
  • 2.LSTM
  • 3. tensorflow 中的RNN-LSTM
    • 3.1 tf.nn.rnn_cell.BasicRNNCell()
    • 3.2 tf.nn.rnn_cell.BasicLSTMCell()
    • 3.3 tf.nn.dynamic_rnn()--多步執行循環神經網絡

1.RNN

RNN-Recurrent Neural Network-循環神經網絡

RNN用來處理序列數據。多層感知機MLP層間節點全聯接,層內節點并無鏈接。 RNN層內節點的之間存在連接關系,用來反映上一層隱層狀態作為下一層的輸入,將直接輸給中間隱藏層。

RNN網絡模塊圖如下所示:
在這里插入圖片描述
其中: xtx_txt? 網絡t時刻輸入, hth_tht? 網絡t時刻的輸出。 如果將RNN按時間序列展開,可以得到以下鏈式結構:

在這里插入圖片描述
用簡單的權重矩陣建模rnn, 輸入-狀態-輸出之間存在以下的關系:[oto_tot?即上文的hth_tht?]
在這里插入圖片描述
st=f(U?xt+W?st?1)s_{t} = f(U\cdot x_t + W\cdot s_{t-1})st?=f(U?xt?+W?st?1?)
ot=g(V?st)o_t = g(V\cdot s_t)ot?=g(V?st?)

st?1s_{t-1}st?1?能夠建模歷史信息對當前輸出的影響。原始RNN隨著時間的推移,歷史狀態對當前輸出的影響減弱。但是很多任務需要長時依賴關系。LSTM營運而生。

2.LSTM

LSTM-Long Short-Term Memory 可以學習長時依賴信息,LSTM網絡模塊圖如下所示:
在這里插入圖片描述
狀態傳遞機制決定了上一時刻狀態信息的保留量,以及新輸入信息的增量。LSTM包含三個關鍵的門用于實現這一傳遞機制。
在這里插入圖片描述
**遺忘門:**上一時刻輸出和這一個時刻輸入決定上一時刻的狀態保留百分比ftf_tft?。【sigmoid輸出0-1 之間的一個數】
在這里插入圖片描述
輸入門:C~t\tilde{C}_tC~t?為新信息候選向量, iti_tit? 決定了多少新信息候選向量能夠通過。隨后更新狀態信息:
在這里插入圖片描述
在這里插入圖片描述
輸出門: 當前狀態CtC_tCt?ht?1h_{t-1}ht?1? 以及xtx_txt? 共同決定當前時刻輸出信息hth_tht?

在這里插入圖片描述

參考資料:https://colah.github.io/posts/2015-08-Understanding-LSTMs/

3. tensorflow 中的RNN-LSTM

RNNCell是TensorFlow中實現RNN的基本單元,每個RNNCell都有一個call方法,使用方式是:(output, next_state) = call(input, state)。RNNCell是一個抽象類,實際使用時候,用它的兩個子類BasicRNNCell [RNN的基礎類] 和BasicLSTMCell [LSTM的基礎類]。

3.1 tf.nn.rnn_cell.BasicRNNCell()

RNNCell,具有兩個比較重要類屬性:state_size–決定隱層的大小,output_size決定輸出大小
例如將(batch_size, input_size)數據輸入RNN,得到的隱層狀態就是(batch_size, state_size),輸出是(batch_size, output_size)。

import tensorflow as tf
import numpy as np
cell = tf.nn.rnn_cell.BasicRNNCell(num_units=128) # state_size = 128
print(cell.state_size)                            # 128inputs = tf.placeholder(np.float32, shape=(32, 100)) # batch_size=32
h0 = cell.zero_state(32, np.float32) # 全零狀態(batch_size, state_size)
output, h1 = cell.call(inputs, h0)
print(h1.shape)                            # (32, 128)

3.2 tf.nn.rnn_cell.BasicLSTMCell()

tf.nn.rnn_cell.BasicLSTMCell(num_units,              # int類型,隱層輸出大小forget_bias=1.0,        # float類型, 遺忘門偏置state_is_tuple=True,    # 回的狀態是h_t和c_t的2元tuple  LSTM可以看做有兩個隱狀態h和cactivation=None,        # 內部狀態的激活函數。默認為tanhreuse=None,name=None,dtype=None

3.3 tf.nn.dynamic_rnn()–多步執行循環神經網絡

基礎的RNNCell使用它的call函數進行運算時,只是在序列時間上前進了一步。例如使用(x1,h0)得到h1,(x2, h1)得到h2等。如果序列長度為10,需調用10次call函數,比較麻煩。

TensorFlow提供了一個tf.nn.dynamic_rnn函數,該函數可實現n次調用call函數。即通過{h0,x1, x2, …., xn}得{h1,h2…,hn}。

輸入數據格式為(batch_size, time_steps, input_size),其中time_steps表示序列長度,input_size表示單個序列元素的特征長度。

tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None, dtype=None,parallel_iterations=None, swap_memory=False, time_major=False, scope=None
)

對于一個定義的的cell ,多次執行該cell 的demo 為:

outputs, state = tf.nn.dynamic_rnn(cell, inputs, initial_state=initial_state)
# outputs就是time_steps步里所有的輸出-(batch_size, time_steps, cell.output_size)。state是最后一步的隱狀態,它的形狀為(batch_size, cell.state_size)。

動態調整sequence_length tf.nn.dynamic_rnn 詳解

參考資料:
tensorflow學習之BasicLSTMCell詳解
TensorFlow中RNN實現的正確打開方式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444626.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

判斷微信小游戲用戶是否真的分享

作為開發者,傳統的微信分享拿到分享的狀態碼并不能完全確定玩家是否分享到好友或群。 因此一部分開發者給分享做一個定時器,超過5秒就判定玩家分享成功,實際上很容易被玩家利用。 因此我們可以利用微信分享過程中的圖片url鏈接做文章: 1.需要一個web服務器,提供給客戶端…

Leaf服務器框架從入門到放棄(一)認識Leaf和安裝Leaf環境

首先我簡單介紹下Leaf服務器,下面這段描述是我摘自github官方README說明: Leaf 游戲服務器框架簡介 Leaf 是一個由 Go 語言(golang)編寫的開發效率和執行效率并重的開源游戲服務器框架。Leaf 適用于各類游戲服務器的開發,包括 H5(HTML5)游戲服務器。 Leaf 的關注點:…

Linux Command List

Linux Command ListLinux Command List)todops auxsednohupnvidia-smisnaptorch.cuda.is_available()Linux Command List) Linux(1)-touch,mkdir,rm,mv,cp,ls,cd,cat Linux(2)-tar,find,grep,xargs Linux(3)-網-ifconfig,ping,ssh Linux(4)-資源-du,top,free,gnome Linux(…

JS演示圖論匯總

BFS.js var BFSClass function () {this.isVisit new Array();this.adj new Array();this.vQueue new Array();this.curV;this.temp new Array();this.init function (beginV) {this.curV null;this.temp [];//初始化頂點訪問數組this.isVisit [];for (var i 0; i &…

Shell腳本自動監控docker容器的狀態

首先我們來寫一個腳本rootserver:~# cat docker_monitor.sh #!/bin/bash #監控容器的運行狀態 #容器名稱 傳入參數 containerName$1 #當前時間 nowdate "%Y-%m-%d %H:%M:%S"# 查看進程是否存在 existdocker inspect --format {{.State.Running}} ${containerNam…

Python模塊(9)-Time,Json 簡易使用教程

Time,Json簡易使用教程1 Time1.1 獲取時間1.2 程序計時2 Json1 Time Python中內置了一些與時間處理相關的庫,如time、datatime和calendar庫。其中time庫是Python中處理時間的標準庫,是最基礎的時間處理庫,提供如下功能功: &#…

AWS的VPC使用經驗(一)

Amazon VPC 概念 Amazon VPC 是 Amazon EC2 的網絡化階層。如果您是首次使用 Amazon EC2,請參閱 Amazon EC2 用戶指南(適用于 Linux 實例) 中的什么是 Amazon EC2?以獲取簡要概述。 以下是 VPC 的主要概念: Virtual Private Cloud (VPC) 是僅適用于您的 AWS 賬戶的虛擬網…

AWS的VPC使用經驗(二)

上文說了如何創建自定義VPC網絡的EC2實例,這節說如何在多個VPC之間創建對等連接。 這里分別填寫自己的VPC和對方的VPC的ID信息,然后在對方的VPC里就能看到有連接請求,在對方的連接請求里選擇 “操作”->接受。 到這里已經快要收尾了&…

ML Tools List

文章目錄1.Pyorch2.TensorFlow3. Other1.Pyorch Pytorch(1)-內置/自己設計的損失函數使用 Pytorch(2)-tensor常用操作 Pytorch(3)–數據載入接口:Dataloader、datasets Pytorch(4)-模型保存-載入-eval() Pytorch(5)-梯度反向傳播 Pytorch(6)–設置隨機種子&am…

ubuntu nginx配置負載均衡篇(一)

Nginx 代理服務的配置說明 1、設置 404 頁面導向地址 error_page 404 https://www.runnob.com; #錯誤頁 proxy_intercept_errors on; #如果被代理服務器返回的狀態碼為400或者大于400,設置的error_page配置起作用。默認為off。 2、如果我們的代理只允許接受get,post請求…

坦克大戰

效果 map.js var map4 [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,2,0,0,2,2,0,0,0,2,2,0,0,2,2,0,0,2,2,0,2,2,0],[0,2,2,0,0,2,2,0,0,0,2,2,3,3,2,2…

ubuntu nginx配置負載均衡篇(二)

這里提供部分我的配置文件: nginx.conf: user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on; }http {### Basic Settings##sendfile on;tcp_nopush on;tcp_nodelay…

Papar Notes List

PaperNotes(1)-Modeling the World from Internet Photo Collections PaperNotes(2)-Generative Adversarial Nets PaperNotes(3)-圖像分割-RCNN-FCN-Boxsup PaperNotes(4)-高質量圖像生成-cgan,stackgan,lapgan,cyclegan,pix2pixgan PaperNotes(5)-Conditional Generative Adv…

windows安裝 MySQL5.7服務端

1,安裝https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.30-winx64.zip mysql安裝包。 2. 自己配置my.ini [client] port=3306 [mysql] default-character-set=utf8[mysqld] character-set-server=utf8 port=3306 basedir="D:/mysql-5.7.30-winx64/" datad…

screen命令使用說明

有些程序寫的很操蛋,比如放到后臺執行,但后邊還需要再切回前臺來重新執行,這個時候我們選擇screen工具: screen -d -m -S LoginServer[6001] ./run_login_server.sh 具體的screen命令包含哪些參數,可以參考scree…

看這玩意復習你還會掛科?《數據結構篇》

一.緒論 1.何謂程序設計? 程序 算法 數據結構 2.數據結構的定義 是相互之間存在一種或多種特定關系的數據元素的集合 3.數據、數據元素、數據對象的概念 數據(data):對客觀事物的符號表示,含義很廣&am…

Machine Learning List

機器學習: 每多加一個符號,就多加一個變量。 每次確定給定量,其余均可變,方便分析問題。 MachineLearning(1)-激活函數sigmoid、損失函數MSE、CrossEntropyLoss MachineLearning(2)-圖像分類常用數據集 MachineLearning(3)-流型 …

反編譯用unity打包的資源文件

如何反編譯破解別人家的游戲包,美術資源是維權和侵權一直杠下去的話題,如果作為商業用途,我是反對破壞原作者的創意,侵害作者的勞動果實行為。但是如果是僅僅為了學習,實驗,不妨參考我的文章,我相信你可以從我的文章里獲取如何破解通過unity打包的移動游戲美術資源。 之…

看這玩意復習你還會掛科?《網絡原理篇》

第一章 概述 計算機網絡的功能 連通性、共享 【連通性:是計算機網絡使上網用戶之間都可以交換信息,好像這些用戶的計算機都可以彼此直接連接一樣。用戶之間的距離也似乎因此而變近了。共享:是指資源共享,它的含義是多方面的&…

蘋果訂閱服務器端開發

有時候我們想做一個蘋果訂閱功能,需要在蘋果開發者后臺添加訂閱商品productid/ 訂閱需要增加一個參數: password: 秘鑰, 就可以了, 但是官方文檔說秘鑰僅僅用在自動續訂上面 大家叫后臺加個驗證,如果蘋果驗證返回21004的話(21004 你提供的共享密鑰和賬戶的共享密鑰不一致)…