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)