我可以在theano中获得共享变量的形状信息吗?

时间:2016-03-30 07:19:58

标签: machine-learning neural-network theano deep-learning

似乎variable.shape会通知我

AttributeError: 'SharedVariable' object has no attribute 'shape'

而theano.tensor.shape(变量)将返回shape.0

我真的很困惑,为什么我不能得到关于它的形状信息?当我想获取符号变量的形状信息时,会出现同样的问题。这太奇怪了。

x = T.matrix('x')   # the data is presented as rasterized images
y = T.ivector('y')  # the labels are presented as 1D vector of
                        # [int] labels

layer0_input = x.reshape((batch_size, 1, 28, 28))

在上面的例子中,x(符号变量)已经被重新塑造成某种形状,如果我无法检索其形状信息而对它仍然有意义,同时仍然可以为其指定新的形状。

1 个答案:

答案 0 :(得分:1)

第一个错误可能是由于您尝试评估数据类型shape上的SharedVariable属性而不是实际共享变量。

否则,获取shape.0是完全正常的:这是一个表示形状的符号表达式,它是先验未知的。只要您使用数据进行评估,您就会看到形状:

import theano
import theano.tensor as T
import numpy as np
s = theano.shared(np.arange(2 * 3 * 5).reshape(2, 3, 5))
print(s.shape)  # gives you shape.0
print(s.shape.eval())  # gives you an array containing 2, 3, 5

a = T.tensor3()
print(a.shape)  # gives you shape.0
print(a.shape.eval({a: np.arange(2 * 3 * 5).reshape(2, 3, 5).astype(theano.config.floatX)}))  # gives 2, 3, 5