我是靠谱客的博主 洁净皮卡丘,最近开发中收集的这篇文章主要介绍Theano 初探(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

设定T.dscalar设定 theano标量, 转换函数中 string 'x'并没有实质性作用,
其作用在于调试。

这里生成function f后,f就是一个“一般的”python函数,
这与不设定function的另一个调用形式相对应,
z.eval({x: 16.3, y:12.1})

theano 函数还支持张量输出,即多维因变量。
亦可以使用诸如 T.dmatrices('a', 'b')这样的方法一次初始化多个自变量矩阵。

类似于Python functools 中提供的partial函数,theano的数值函数也提供了
类似于partial的默认参数绑定方法,In.
但其行为与partial的实现不同,后者是永久性对函数对象参数进行修改,而前者
提供函数的默认参数。
甚至这种方法可以对函数提供默认参数的别名,这为改变参数的序提供了方便。

theano还提供了可以在若干个(可以是不同)函数调用间共享的变量,shared
这类似于C++中的静态变量。(在机理上)
设定了shared变量后,可以利用update参数实现shared变量的改变。(更新)
这里值得注意的一点是变量的更新是在函数返回之后,否则初值的设定就没有意义
了。
shared变量的意义不仅仅在于如同全局常量的意义,theano定义了这个变量可以
作为输出等,这使得其具备微分等数学性质。这也有运行速度上考虑的意义。

当不希望使用state变量时,可以使用given参数重载使用state的行为,
但这里要注意应当将用于替换的变量与state变量声明为相同类型。(state.dtype)

theano提供了用于函数复制的copy方法,结合swap参数可以对原函数的参数进行替换。
设定copy参数delete_update为True可以将拷贝的函数的update行为删掉。

下面是示例代码:
#from theano import *
import theano.tensor as T
from theano import function
x = T.dscalar('x')
y = T.dscalar('y')
z = x + y
f = function([x, y], z)
print f(2, 3)
print type(f(2, 3))
x = T.dmatrix('x')
y = T.dmatrix('y')
z = x + y
f = function([x, y], z)
print f([[1, 2], [3, 4]], [[10, 20], [30, 40]])
import theano
a = theano.tensor.vector()
out = a + a ** 10
f = theano.function([a], out)
print f([0, 1, 2])
b = theano.tensor.vector()
out = a ** 2 + b ** 2 + 2 * a * b
f = theano.function([a, b], out)
print f([0], [2])
import theano
import theano.tensor as T
x = T.dmatrix('x')
s = 1 / (1 + T.exp(-x))
logistic = theano.function([x], s)
print logistic([[0, 1], [-1, -2]])
s2 = (1 + T.tanh(x / 2)) / 2
logistic2 = theano.function([x], s2)
print logistic2([[0, 1], [-1, -2]])
a, b = T.dmatrices('a', 'b')
diff = a - b
abs_diff = abs(diff)
diff_squared = diff ** 2
f = theano.function([a, b], [diff, abs_diff, diff_squared])
print f([[1, 1], [1, 1]], [[0, 1], [2, 3]])
from theano import In
x, y = T.dscalars('x', 'y')
z = x + y
f = function([x, In(y, value = 1)], z)
print f(33)
print f(33, 2)
x, y, w = T.dscalars('x', 'y', 'w')
z = (x + y) * w
f = function([x, In(y, value = 1), In(w, value = 2, name = 'w_by_name')], z)
print f(33)
print f(33, 2)
print f(33, 0, 1)
print f(33, w_by_name = 1)
print f(33, w_by_name = 1, y = 0)
from theano import shared
state = shared(0)
inc = T.iscalar('inc')
accumulator = function([inc], state, updates = [(state, state + inc)],  on_unused_input='ignore')
print state.get_value()
print accumulator(1)
print state.get_value()
print accumulator(300)
print state.get_value()
state.set_value(-1)
accumulator(3)
print (state.get_value())
decrementor = function([inc], state, updates = [(state, state - inc)])
print decrementor(2)
print state.get_value()
fn_of_state = state * 2  + inc
foo = T.scalar(dtype = state.dtype)
skip_shared = function([inc, foo], fn_of_state, givens = [(state, foo)])
print skip_shared(1, 3)
print state.get_value()
state.set_value(10)
new_state = theano.shared(0)
new_accumulator = accumulator.copy(swap = {state: new_state})
print new_accumulator(100)
print new_state.get_value()
print state.get_value()
null_accumulator = accumulator.copy(delete_updates=True)
print null_accumulator(9000)
print state.get_value()












最后

以上就是洁净皮卡丘为你收集整理的Theano 初探(一)的全部内容,希望文章能够帮你解决Theano 初探(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部