摘要:復發的一種常用形式,可以用于循環和是的特例可以根據一些輸出序列一個函數,每一步都會生成一個輸出可以查看之前步的輸出給定一個初始狀態可以通過函數計算一個列表的和通常一個循環可以用操作符進行實現使用的優點迭代次數為符號圖的一部分最大限度地減少傳
Scan
復發(Recurrence)的一種常用形式,可以用于循環(looping)
Reduction和map是scan的特例
可以根據一些輸出序列scan一個函數(function),每一步都會生成一個輸出
可以查看之前k步的輸出
給定一個初始狀態z=0,可以通過scan函數z + x(i)計算一個列表的和sum(a_list)
通常一個for循環可以用scan()操作符進行實現
使用scan的優點:
迭代次數為符號圖的一部分
最大限度地減少GPU傳輸(如果用到了GPU)
通過序列步長計算梯度
運行速率比python內置的for循環稍微快些
可以通過檢測需要的實際內存量,來降低整體內存使用量
例子:對應元素計算tanh(x(t).dot(W) + b)import theano import theano.tensor as T import numpy as np # 定義張量變量 X = T.matrix("X") W = T.matrix("W") b_sym = T.vector("b_sym") results, updates = theano.scan(lambda v: T.tanh(T.dot(v, W) + b_sym), sequences=X) compute_elementwise = theano.function([X, W, b_sym], results) # 測試 x = np.eye(2, dtype=theano.config.floatX) w = np.ones((2, 2), dtype=theano.config.floatX) b = np.ones((2), dtype=theano.config.floatX) b[1] = 2 compute_elementwise(x, w, b) # 和numpy相比較 np.tanh(x.dot(w) + b)例子: 計算序列x(t) = tanh(x(t-1).dot(W) + y(t).dot(U) + p(T-t).dot(V))
import theano import theano.tensor as T import numpy as np # 定義張量變量 X = T.vector("X") W = T.matrix("W") b_sym = T.vector("b_sym") U, Y, V, P = T.matrices("U", "Y", "V", "P") result, update = theano.scan(lambda y, p, x_tml: T.tanh(T.dot(x_tml, W) + T.dot(y, U) + T.dot(p, V)), sequences=[Y, P[::-1]], outputs_info=[X]) compute_seq = theano.function(inputs=[X, W, Y, U, P, V], outputs=result) # 測試 x = np.zeros((2), dtype=theano.config.floatX) x[1] = 1 w = np.ones((2, 2), dtype=theano.config.floatX) y = np.ones((5, 2), dtype=theano.config.floatX) y[0, :] = -3 u = np.ones((2, 2), dtype=theano.config.floatX) p = np.ones((5, 2), dtype=theano.config.floatX) p[0, :] = 3 v = np.ones((2, 2), dtype=theano.config.floatX) print(compute_seq(x, w, y, u, p, v)) # 與Numpy對比 x_res = np.zeros((5, 2), dtype=theano.config.floatX) x_res[0] = np.tanh(x.dot(w) + y[0].dot(u) + p[4].dot(v)) for i in range(1, 5): x_res[i] = np.tanh(x_res[i - 1].dot(w) + y[i].dot(u) + p[4-i].dot(v)) print(x_res)例子: 計算X的行范式
import theano import theano.tensor as T import numpy as np # 定義張量變量 X = T.matrix("X") results, updates = theano.scan(lambda x_i: T.sqrt((x_i ** 2)).sum(), sequences=[X]) compute_norm_lines = theano.function(inputs=[X], outputs=results) # 測試 x = np.diag(np.arange(1, 6, dtype=theano.config.floatX), 1) print(compute_norm_lines(x)) # 和Numpy對比 print(np.sqrt((x ** 2).sum(1)))例子: 計算X的列范式
import theano import theano.tensor as T import numpy as np # 定義張量變量 X = T.matrix("X") results, updates = theano.scan(lambda x_i: T.sqrt((x_i ** 2).sum()), sequences=[X.T]) compute_norm_cols = theano.function(inputs=[X], outputs=results) # 測試 x = np.diag(np.arange(1, 6, dtype=theano.config.floatX), 1) print(compute_norm_cols(x)) # 和Numpy對比 print(np.sqrt((x ** 2).sum(0)))
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38660.html
摘要:首先是最頂層的抽象,這個里面最基礎的就是和,記憶中和的抽象是類似的,將計算結果和偏導結果用一個抽象類來表示了。不過,本身并沒有像其它兩個庫一樣提供,等模型的抽象類,因此往往不會直接使用去寫模型。 本文將從deep learning 相關工具庫的使用者角度來介紹下github上stars數排在前面的幾個庫(tensorflow, keras, torch, theano, skflow, la...
摘要:相比于直接使用搭建卷積神經網絡,將作為高級,并使用作為后端要簡單地多。測試一學習模型的類型卷積神經網絡數據集任務小圖片數據集目標將圖片分類為個類別根據每一個的訓練速度,要比快那么一點點。 如果我們對 Keras 在數據科學和深度學習方面的流行還有疑問,那么考慮一下所有的主流云平臺和深度學習框架的支持情況就能發現它的強大之處。目前,Keras 官方版已經支持谷歌的 TensorFlow、微軟的...
摘要:下圖總結了絕大多數上的開源深度學習框架項目,根據項目在的數量來評級,數據采集于年月初。然而,近期宣布將轉向作為其推薦深度學習框架因為它支持移動設備開發。該框架可以出色完成圖像識別,欺詐檢測和自然語言處理任務。 很多神經網絡框架已開源多年,支持機器學習和人工智能的專有解決方案也有很多。多年以來,開發人員在Github上發布了一系列的可以支持圖像、手寫字、視頻、語音識別、自然語言處理、物體檢測的...
摘要:第一個主流產品級深度學習庫,于年由啟動。在年月日宣布,的開發將終止。張量中最基本的單位是常量變量和占位符。占位符并沒有初始值,它只會分配必要的內存。是一個字典,在字典中需要給出每一個用到的占位符的取值。 為什么選擇 TensorFlow?在本文中,我們將對比當前最流行的深度學習框架(包括 Caffe、Theano、PyTorch、TensorFlow 和 Keras),幫助你為應用選擇最合適...
摘要:簡稱,是基于聚焦行業應用且提供商業支持的分布式深度學習框架,其宗旨是在合理的時間內解決各類涉及大量數據的問題。是負責開發的用編寫,通過引擎加速的深度學習框架,是目前受關注最多的深度學習框架。 作者簡介魏秀參,曠視科技 Face++ 南京研究院負責人。南京大學 LAMDA 研究所博士,主要研究領域為計算機視覺和機器學習。在相關領域較高級國際期刊如 IEEE TIP、IEEE TNNLS、Mac...
閱讀 2791·2021-11-17 09:33
閱讀 4454·2021-09-22 15:57
閱讀 2866·2019-08-30 14:16
閱讀 3133·2019-08-29 14:07
閱讀 2413·2019-08-26 11:55
閱讀 3415·2019-08-23 17:07
閱讀 1725·2019-08-23 16:50
閱讀 2535·2019-08-23 16:08