Theano2 1 9 基礎知識之條件

2021-07-03 08:07:33 字數 1518 閱讀 3742

來自:

conditions

example

from theano import tensor as t

from theano.ifelse import ifelse

import theano, time, numpy

a,b = t.scalars('a', 'b')

x,y = t.matrices('x', 'y')

z_switch = t.switch(t.lt(a, b), t.mean(x), t.mean(y))

z_lazy = ifelse(t.lt(a, b), t.mean(x), t.mean(y))

f_switch = theano.function([a, b, x, y], z_switch,

mode=theano.mode(linker='vm'))

f_lazyifelse = theano.function([a, b, x, y], z_lazy,

mode=theano.mode(linker='vm'))

val1 = 0.

val2 = 1.

big_mat1 = numpy.ones((10000, 1000))

big_mat2 = numpy.ones((10000, 1000))

n_times = 10

tic = time.clock()

for i in xrange(n_times):

f_switch(val1, val2, big_mat1, big_mat2)

print 'time spent evaluating both values %f sec' % (time.clock() - tic)

tic = time.clock()

for i in xrange(n_times):

f_lazyifelse(val1, val2, big_mat1, big_mat2)

print 'time spent evaluating one value %f sec' % (time.clock() - tic)

在這個例子中,

felse

操作比switch花費更少的時間(大約節約一半時間)因為它只計算兩個變數中的乙個。

>>> python ifelse_switch.py

time spent evaluating both values 0.6700 sec

time spent evaluating one value 0.3500 sec

除非使用了 linker='vm'

或者 linker='cvm'

, ifelse

才會計算兩個變數,然後會和switch有著一樣的計算時間。儘管聯結器當前設定的預設值不是cvm,不過在不久的將來會是的。

沒有自動的優化,通過使用廣播的標量來替換switch成為ifelse,因為這並不見得總是更快的,見 ticket.

Theano2 1 9 基礎知識之條件

來自 conditions example from theano import tensor as t from theano.ifelse import ifelse import theano,time,numpy a,b t.scalars a b x,y t.matrices x y z ...

Theano2 1 11 基礎知識之稀疏

來自 sparse 通常來說,稀疏矩陣可以和常規矩陣一樣提供相同的功能。兩者不同之處在於在記憶體中儲存矩陣和表示矩陣的方式。在稀疏矩陣中,只有非0元素才會被儲存。這種方式帶來的優點有 首先,這可以很明顯的減少記憶體的使用 第二 通過使用指定的稀疏演算法和這種稀疏儲存方法可以減少計算時間。我們通常將常...

Theano2 1 11 基礎知識之稀疏

來自 sparse 通常來說,稀疏矩陣可以和常規矩陣一樣提供相同的功能。兩者不同之處在於在記憶體中儲存矩陣和表示矩陣的方式。在稀疏矩陣中,只有非0元素才會被儲存。這種方式帶來的優點有 首先,這可以很明顯的減少記憶體的使用 第二 通過使用指定的稀疏演算法和這種稀疏儲存方法可以減少計算時間。我們通常將常...