为什么这个 Theano.scan 函数不抛出错误?
Why doesn this Theano.scan function not throw an error?
我有这段来自 Theano 文档的代码可以计算多项式
import numpy
import theano
import theano.tensor as T
theano.config.warn.subtensor_merge_bug = False
coefficients = theano.tensor.vector("coefficients")
x = T.scalar("x")
max_coefficients_supported = 1000
# Generate the components of the polynomial
full_range=theano.tensor.arange(max_coefficients_supported)
components, updates = theano.scan(fn=lambda coeff, power, free_var:
coeff * (free_var ** power),
outputs_info=None,
sequences=[coefficients, full_range],
non_sequences=x)
polynomial = components.sum()
calculate_polynomial = theano.function(inputs=[coefficients, x],
outputs=polynomial)
test_coeff = numpy.asarray([1, 0, 2], dtype=numpy.float32)
print calculate_polynomial(test_coeff, 3)
我认为它正在做的是计算 1*(3^0) + 0*(3^1) + 2*(3^2) 这是我的输出 19.0。
我的问题是 full_range 是一个包含 1000 个元素的 [0, 1, 2, ... ,998, 999] 数组。这被用作 Theano 扫描参数中的序列。
为什么 w.r.t 扫描函数中没有 sequences 参数。它有两个序列作为输入,即系数和 full_range。这意味着在 scan 函数的每次迭代中,它都会从这些输入中的每一个中选择一个值,并且 运行s 代码
coeff * (free_var ** power)
其中 free_var 为 3。当 coeff 中的元素数量仅为 3 而 power 中的元素数量(即 full_range input) 有1000个元素?我在这里遗漏了一些东西。
谢谢
当将多个序列传递给scan
时,它会根据最短序列中的元素进行迭代。
given multiple sequences of uneven lengths, scan will truncate to the
shortest of them. This makes it safe to pass a very long arange, which
we need to do for generality, since arange must have its length
specified at creation time.
我有这段来自 Theano 文档的代码可以计算多项式
import numpy
import theano
import theano.tensor as T
theano.config.warn.subtensor_merge_bug = False
coefficients = theano.tensor.vector("coefficients")
x = T.scalar("x")
max_coefficients_supported = 1000
# Generate the components of the polynomial
full_range=theano.tensor.arange(max_coefficients_supported)
components, updates = theano.scan(fn=lambda coeff, power, free_var:
coeff * (free_var ** power),
outputs_info=None,
sequences=[coefficients, full_range],
non_sequences=x)
polynomial = components.sum()
calculate_polynomial = theano.function(inputs=[coefficients, x],
outputs=polynomial)
test_coeff = numpy.asarray([1, 0, 2], dtype=numpy.float32)
print calculate_polynomial(test_coeff, 3)
我认为它正在做的是计算 1*(3^0) + 0*(3^1) + 2*(3^2) 这是我的输出 19.0。
我的问题是 full_range 是一个包含 1000 个元素的 [0, 1, 2, ... ,998, 999] 数组。这被用作 Theano 扫描参数中的序列。
为什么 w.r.t 扫描函数中没有 sequences 参数。它有两个序列作为输入,即系数和 full_range。这意味着在 scan 函数的每次迭代中,它都会从这些输入中的每一个中选择一个值,并且 运行s 代码
coeff * (free_var ** power)
其中 free_var 为 3。当 coeff 中的元素数量仅为 3 而 power 中的元素数量(即 full_range input) 有1000个元素?我在这里遗漏了一些东西。
谢谢
当将多个序列传递给scan
时,它会根据最短序列中的元素进行迭代。
given multiple sequences of uneven lengths, scan will truncate to the shortest of them. This makes it safe to pass a very long arange, which we need to do for generality, since arange must have its length specified at creation time.