Python-theano.scan()-返回函数值而不反馈到循环中

Python-theano.scan()-返回函数值而不反馈到循环中,python,theano,Python,Theano,是否可以返回在扫描函数中计算的值,而不将其反馈到扫描函数中 e、 g 给 Values: f: [ 1. 2. 6. 24.] 但是,我想输出f()中的两个值,而不将后一个值反馈回scan函数: def f(seq_v, prev_v): return seq_v*prev_v, prev_v+1 给出类似于: Values: f: [ [1. , 2.] [2. , 3.] [6. , 4.] [24. , 5.] ] (我只想指出,这个问题很小,但我想

是否可以返回在扫描函数中计算的值,而不将其反馈到扫描函数中

e、 g

Values:
f:  [  1.   2.   6.  24.]
但是,我想输出
f()
中的两个值,而不将后一个值反馈回scan函数:

def f(seq_v, prev_v):
    return seq_v*prev_v, prev_v+1
给出类似于:

Values:
f:  [ [1. , 2.]   [2. , 3.]   [6. , 4.]  [24. , 5.] ]

(我只想指出,这个问题很小,但我想使用这个想法来调试扫描函数和检查输出值)

对于不想反馈到
f
的输出,需要将
outputs\u info
指定为
None
。有关更多信息,请参见下面的示例,该示例应满足您的要求

import theano
import theano.tensor as T
import numpy as np

theano.config.exception_verbosity='high'
theano.config.optimizer='None'

def f(seq_v, prev_v):
    return seq_v*prev_v, seq_v+1

a = T.vector('a')

ini = T.constant(1, dtype=theano.config.floatX)

result, updates = theano.scan(fn=f,
                              outputs_info=[ini,None],
                              sequences=[a])

fn  = theano.function(inputs=[a], outputs=result)

A = np.arange(1,5, dtype=T.config.floatX)
out = fn(A)

print('Values:\nf:\t{}'.format(out))
输出:

Values:
f:  [array([  1.,   2.,   6.,  24.], dtype=float32), array([ 2.,  3.,  4.,  5.], dtype=float32)]
Values:
f:  [array([  1.,   2.,   6.,  24.], dtype=float32), array([ 2.,  3.,  4.,  5.], dtype=float32)]