将输入参数传递给 Theano 函数的正确方法是啥?
Posted
技术标签:
【中文标题】将输入参数传递给 Theano 函数的正确方法是啥?【英文标题】:What is the right way to pass inputs parameters to a Theano function?将输入参数传递给 Theano 函数的正确方法是什么? 【发布时间】:2016-06-07 23:03:26 【问题描述】:我正在使用安装了 Theano 库(更新版本)的 Python 2.7,我在定义 Theano 函数时遇到了输入参数问题。
代码是:
corruption_level = T.scalar('corruption') # % of corruption to use
learning_rate = T.scalar('lr') # learning rate to use
fn = theano.function(
inputs=[
index,
theano.In(corruption_level, value=0.2),
theano.In(learning_rate, value=0.1)
],
outputs=cost,
updates=updates,
givens=
self.x: train_set_x[batch_begin: batch_end]
)
取自这里:
http://deeplearning.net/tutorial/code/SdA.py
它给了我这个错误,使用 Eclipse:
NotImplementedError: In() instances and tuple inputs trigger the old
semantics, which disallow using updates and givens
所以,如果我以这种方式更改代码:
fn = theano.function(
inputs=[
index,
#theano.In(corruption_level, value=0.2),
#theano.In(learning_rate, value=0.1)
corruption_level,
learning_rate
],
outputs=cost,
updates=updates,
givens=
self.x: train_set_x[batch_begin: batch_end]
)
它有效,但我无法传递 corruption_level 和 learning_rate 的值。
有人可以帮忙吗?谢谢!
卢卡
【问题讨论】:
theano.In
语法对我有用,也许您使用的是不同的版本? (我的是 Theano 0.7)
theano.function
是创建一个函数,可以在调用的时候传值,比如fn(idx, 0.2, 0.1)
是的,theano.In(corruption_level, value=0.2)
将corruption_level
的默认值设为 0.2,如果您将 0.2 显式传递给函数,它应该是相同的。
好的,谢谢! :-) 而且,只是为了好奇:如果我想将默认值设为 0.2?因为如果我简单地写 corruption_level = 0.2,作为输入参数,它就不起作用! :-(
不客气,如果没有theano.In
,我不知道该怎么做,也许我只是用另一个具有一些默认值的函数来包装它。 :P
【参考方案1】:
In 已正式弃用,并计划进行替换。几天之内,它就从 Theano 开发版本中删除了。但后来我们意识到,最好保留它并更改它并取消我们计划中的替换。
在那段时间,Theano 想要的和深度学习教程之间也存在一些不一致。
这是固定的。所以现在,更新到 Theano 0.8 或使用 Theano 的当前开发版本,它应该可以正常工作。
也许其他有相关问题的人可能需要在几天内更新深度学习教程代码,它正在使用我们删除的计划替换。
theano.In() 现在可以像您的问题一样工作了。
【讨论】:
以上是关于将输入参数传递给 Theano 函数的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在python中将函数传递给cProfile的正确方法是啥?