国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

theano學習初步(一)

2019-11-14 12:27:11
字體:
來源:轉載
供稿:網友

http://blog.csdn.net/u013007900/article/details/52439172

theano學習初步(一)

2016-09-05 12:29 510人閱讀 評論(0) 收藏 舉報 分類:

目錄(?)[+]

此文源于Theano官方教程,例子源于官方教程以及此處

代碼和例子都收錄在我的github中,求斧正,求粉求星星。

兩個標量相加

代碼如下

import numpyimport theano.tensor as Tfrom theano import function# 第一步,聲明兩個數學意義上的變量x = T.dscalar('x') # 浮點標量y = T.dscalar('y')z = x + y# f 返回的是一個0維度的numpy.ndarrayf = function([x, y], z) # 這兒會有一個明顯的延時,因為function需要編譯成C語言 PRint f(2, 3)print numpy.allclose(f(16.3, 12.1), 28.4)12345678910111234567891011

第一步

x = T.dscalar('x')y = T.dscalar('y')1212

在theano中每一個符號(就是代碼層次的變量)都要有一個類型(Type),這樣就能讓底層的C語言更好地處理代碼。 比如,T.dscalar是一個“0-多維的浮點數(d)數組(標量)”,這是一種類型而不是一個類。所以x和y都不是dscalar的實例,而是TensorVariable的實例。但是x和y的類型是dscalar,代碼如下

>>> type(x)<class 'theano.tensor.var.TensorVariable'>>>> x.typeTensorType(float64, scalar)>>> T.dscalarTensorType(float64, scalar)>>> x.type is T.dscalarTrue1234567812345678

可以給每個變量附上名字,但是這不是必須的,一般用于debug。附上名字的方式就是上文代碼傳入一個字符。

第二步

第二部分是將x和y相加得到z

z = x + y11

z是一個變量,用于表示x和y的和。可以用pp函數來打印出得出z的過程。

>>> from theano import pp>>> print(pp(z))(x + y)123123

第三步

最后一步是創建一個function,x和y是輸入,z是輸出

f = function([x, y], z)11

第一個參數是一個變量數組,表示function的輸入。第二個參數是一個變量或者一個變量數組,表示我們期盼的輸出。 f可以作為一般的Python函數使用。

注意: 為了簡便,也可以跳過第三步,只是用eval方法。但是eval()方法不如function()靈活,但是它也可以做到所有我們在教程中做到的東西。

import numpyimport theano.tensor as Tx = T.dscalar('x')y = T.dscalar('y')z = x + yprint numpy.allclose(z.eval({x : 16.3, y : 12.1}), 28.4)123456123456

我們通過像eval()傳遞一個字典來表示theano變量的值,這個值可以代替這些變量參與運算。 eval()的第一次調用會比較慢,因為它要調用function()去編譯解釋。


兩個矩陣相加

這個依葫蘆畫瓢就可以大致解決了。

import numpyimport theano.tensor as Tfrom theano import functionx = T.dmatrix('x')y = T.dmatrix('y')z = x + yf = function([x, y], z)print f([[1, 2], [3, 4]], [[10, 20], [30, 40]])print f(numpy.array([[1, 2], [3, 4]]), numpy.array([[10, 20], [30, 40]]))123456789123456789

dmatrix是用于表示浮點矩陣的類型,所以我們的f就可以用于一個二維的數列。 我們也可以用numpy.array作為輸入。

當然,將標量加到矩陣,將向量加到矩陣,將標量加到向量等等都是可以的。這種操作被稱為broadcasting

下面羅列一些Theano的類型:

byte: bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor416-bit integers: wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor432-bit integers: iscalar, ivector, imatrix, irow, icol, itensor3, itensor464-bit integers: lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4float: fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4double: dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4complex: cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4

習題

參照代碼

import theanoa = theano.tensor.vector() # declare variableout = a + a ** 10 # build symbolic expressionf = theano.function([a], out) # compile functionprint(f([0, 1, 2]))1234512345

寫出a2+b2+2?a?b的代碼。

from __future__ import print_functionimport theanoa = theano.tensor.vector() # declare variableb = theano.tensor.vector() # declare variableout = a ** 2 + b ** 2 + 2 * a * b # build symbolic expressionf = theano.function([a, b], out) # compile functionprint(f([1, 2], [4, 5])) # prints [ 25. 49.]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮安市| 肥乡县| 金沙县| 卢氏县| 连州市| 涿州市| 宜良县| 梁河县| 崇信县| 郎溪县| 河间市| 盱眙县| 许昌县| 沙坪坝区| 泸定县| 开平市| 吉木乃县| 太仆寺旗| 辽阳市| 宁国市| 遂昌县| 青海省| 桦甸市| 香河县| 东乌珠穆沁旗| 滨海县| 武威市| 临江市| 宁远县| 肥城市| 克什克腾旗| 芒康县| 凯里市| 嘉祥县| 察隅县| 日喀则市| 昌黎县| 正蓝旗| 潞城市| 南康市| 万盛区|