Python 扫描中出现随机数错误,theano.gof.fg.MissingInputError
我在使用随机数和扫描时遇到了一个小问题 请看这个小例子,其中我试图隔离我的问题Python 扫描中出现随机数错误,theano.gof.fg.MissingInputError,python,theano,Python,Theano,我在使用随机数和扫描时遇到了一个小问题 请看这个小例子,其中我试图隔离我的问题 import theano as th import numpy as np from theano import tensor as T stream=th.tensor.shared_randomstreams.RandomStreams() avg = T.vector() initial_values = np.array([1,2,3,4,5], dtype=th.config.floatX) ini
import theano as th
import numpy as np
from theano import tensor as T
stream=th.tensor.shared_randomstreams.RandomStreams()
avg = T.vector()
initial_values = np.array([1,2,3,4,5], dtype=th.config.floatX)
initials = th.shared(initial_values)
def get_output(prev_rand):
rand = stream.normal(size=prev_rand.shape, avg=prev_rand.mean())
random_fn = th.function([], rand)
random_numbers = random_fn()
return random_numbers
result, updates = th.scan(get_output, outputs_info=[initials], n_steps=10)
f = th.function([], result)
print f()
此代码应执行以下操作:
-从数组开始,在本例中为[1,2,3,4,5]
-生成从正态分布中采样的随机数,平均值为先前输出(或初始观测值)的平均值
在这种情况下,第一步的平均值为3。
-假设抽样数为:[2,3,3.5,4,5],新的平均值现在为3.5
-重复上述步骤10个时间步
相反,我得到以下错误输出:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 585, in runfile
execfile(filename, namespace)
File "C:/Users/Main/Documents/Python Scripts/untitled13.py", line 24, in <module>
result, updates = th.scan(get_output, outputs_info=[initials], n_steps=10)
File "C:\Anaconda\lib\site-packages\theano\scan_module\scan.py", line 737, in scan
condition, outputs, updates = scan_utils.get_updates_and_outputs(fn(*args))
File "C:/Users/Main/Documents/Python Scripts/untitled13.py", line 21, in get_output
random_numbers = th.function([], rand, givens={avg:rand})
File "C:\Anaconda\lib\site-packages\theano\compile\function.py", line 265, in function
profile=profile)
File "C:\Anaconda\lib\site-packages\theano\compile\pfunc.py", line 511, in pfunc
on_unused_input=on_unused_input)
File "C:\Anaconda\lib\site-packages\theano\compile\function_module.py", line 1545, in orig_function
on_unused_input=on_unused_input).create(
File "C:\Anaconda\lib\site-packages\theano\compile\function_module.py", line 1224, in __init__
fgraph, additional_outputs = std_fgraph(inputs, outputs, accept_inplace)
File "C:\Anaconda\lib\site-packages\theano\compile\function_module.py", line 141, in std_fgraph
fgraph = gof.fg.FunctionGraph(orig_inputs, orig_outputs)
File "C:\Anaconda\lib\site-packages\theano\gof\fg.py", line 135, in __init__
self.__import_r__(outputs, reason="init")
File "C:\Anaconda\lib\site-packages\theano\gof\fg.py", line 257, in __import_r__
self.__import__(apply_node, reason=reason)
File "C:\Anaconda\lib\site-packages\theano\gof\fg.py", line 353, in __import__
detailed_err_msg)
theano.gof.fg.MissingInputError: A variable that is an input to the graph was neither provided as an input to the function nor given a value. A chain of variables leading from this input to an output is [<TensorType(float32, vector)>, Shape.0, Elemwise{Cast{int32}}.0, RandomFunction{normal}.1]. This chain may not be unique
Backtrace when the variable is created:
File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 585, in runfile
execfile(filename, namespace)
File "C:/Users/Main/Documents/Python Scripts/untitled13.py", line 24, in <module>
result, updates = th.scan(get_output, outputs_info=[initials], n_steps=10)
File "C:\Anaconda\lib\site-packages\theano\scan_module\scan.py", line 597, in scan
arg = safe_new(init_out['initial'])
File "C:\Anaconda\lib\site-packages\theano\scan_module\scan_utils.py", line 75, in safe_new
nw_x = x.type()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Anaconda\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,第585行,在runfile中
execfile(文件名、命名空间)
文件“C:/Users/Main/Documents/Python Scripts/untitled13.py”,第24行,在
结果,updates=th.scan(获取\u输出,输出\u信息=[初始值],n\u步骤=10)
文件“C:\Anaconda\lib\site packages\theano\scan\u module\scan.py”,第737行,在扫描中
条件、输出、更新=scan_utils.get_updates_和_outputs(fn(*args))
文件“C:/Users/Main/Documents/Python Scripts/untitled13.py”,第21行,在get_输出中
随机数=th.函数([],rand,givens={avg:rand})
文件“C:\Anaconda\lib\site packages\theano\compile\function.py”,第265行,在函数中
外形=外形)
pfunc中的文件“C:\Anaconda\lib\site packages\theano\compile\pfunc.py”,第511行
on_unused_input=on_unused_input)
文件“C:\Anaconda\lib\site packages\theano\compile\function\u module.py”,第1545行,在orig\u函数中
on_unused_input=on_unused_input)。创建(
文件“C:\Anaconda\lib\site packages\theano\compile\function\u module.py”,第1224行,在\uuu init中__
F图,附加输出=标准F图(输入、输出、就地接受)
文件“C:\Anaconda\lib\site packages\theano\compile\function\u module.py”,第141行,在std\u fgraph中
fgraph=gof.fg.FunctionGraph(原始输入,原始输出)
文件“C:\Anaconda\lib\site packages\theano\gof\fg.py”,第135行,在\uuu init中__
自我导入(输出,reason=“init”)
文件“C:\Anaconda\lib\site packages\theano\gof\fg.py”,第257行,在导入中__
自我导入(应用节点,原因=原因)
文件“C:\Anaconda\lib\site packages\theano\gof\fg.py”,第353行,输入__
详细信息(错误信息)
theano.gof.fg.MissingInputError:作为图形输入的变量既没有作为函数输入提供,也没有给定值。从这个输入到输出的变量链是[,Shape.0,Elemwise{Cast{int32}}.0,RandomFunction{normal}.1]。此链可能不是唯一的
创建变量时的回溯:
文件“C:\Anaconda\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,第585行,在runfile中
execfile(文件名、命名空间)
文件“C:/Users/Main/Documents/Python Scripts/untitled13.py”,第24行,在
结果,updates=th.scan(获取\u输出,输出\u信息=[初始值],n\u步骤=10)
文件“C:\Anaconda\lib\site packages\theano\scan\u module\scan.py”,第597行,在扫描中
arg=safe_new(init_out['initial'])
文件“C:\Anaconda\lib\site packages\theano\scan\u module\scan\u utils.py”,第75行,安全新
nw_x=x.类型()
我可能又错过了一些简单而明显的东西
非常感谢您的帮助,谢谢 您需要将表单扫描获得的更新字典传递给函数,以便:
f=th.function([initials], result, updates=updates)
此外,不能将共享变量作为函数的输入
您可以实现您正在尝试的目标,例如:
import theano as th
import numpy as np
from theano import tensor as T
stream=th.tensor.shared_randomstreams.RandomStreams()
avg=T.vector()
initials=T.fvector()
def get_output(prev_rand):
return stream.normal(size=prev_rand.shape, avg=prev_rand.mean())
result, updates = th.scan(get_output, outputs_info=[initials], n_steps=10)
f = th.function([initials], result, updates=updates)
initial_values = np.array([1,2,3,4,5], dtype=th.config.floatX)
print f(initial_values)