Python - theano.scan() - return 没有反馈到循环中的函数值
Python - theano.scan() - return function values without feeding back into the loop
是否可以 return 在扫描函数中计算出的值而不将它们反馈回扫描函数。
例如
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#, prev_v+1
a = T.dvector('a')
ini = T.constant(1, dtype=theano.config.floatX)
result, updates = theano.scan(fn=f,
outputs_info=[ini],
sequences=[a],
non_sequences=None)
fn = theano.function(inputs=[a], outputs=result)
A = np.arange(1,5)
out = fn(A)
print 'Values:\nf:\t{}'.format(out)
这给出了
Values:
f: [ 1. 2. 6. 24.]
但是,我想输出 f()
中的两个值而不将后者的值反馈回扫描函数:
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_info
指定为 None
。有关详细信息,请参阅 the scan
documentation. 下面是一个示例,它应该可以满足您的要求。
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)]
是否可以 return 在扫描函数中计算出的值而不将它们反馈回扫描函数。
例如
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#, prev_v+1
a = T.dvector('a')
ini = T.constant(1, dtype=theano.config.floatX)
result, updates = theano.scan(fn=f,
outputs_info=[ini],
sequences=[a],
non_sequences=None)
fn = theano.function(inputs=[a], outputs=result)
A = np.arange(1,5)
out = fn(A)
print 'Values:\nf:\t{}'.format(out)
这给出了
Values:
f: [ 1. 2. 6. 24.]
但是,我想输出 f()
中的两个值而不将后者的值反馈回扫描函数:
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_info
指定为 None
。有关详细信息,请参阅 the scan
documentation. 下面是一个示例,它应该可以满足您的要求。
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)]