我正在使用带有theano后端的keras。现在我有一个变量x,它是一个带有类型字段“TensorType(float32,3D)”的theano张量。
我添加了
from keras import backend as K
在我的文件的开头。然后我写道:
x = K.expand_dims(x, dim = 1)
我预计x的类型字段应为“TensorType(float32,4D)”。但是,它是“TensorType(float32,(False,True,False,False))”,我无法弄清楚原因。此外,keras的文档没有提供有关此功能的更多信息,它只是说“在索引处添加1个大小的维度”dim“”。 此外,如果我执行
x = K.squeeze(x, 1)
,x的类型字段将是“TensorType(float32,matrix)”,这是预期的。
答案 0 :(得分:1)
命令expand_dims
对Theano进行了dimshuffle
操作。元组(False, True, False, False)
告诉您可广播的维度。你可能知道Numpy的广播能力。它与一些关键的差异相似。
来自Theano开发人员:Theano需要在编译之前在图表中声明所有可广播的维度。 NumPy使用运行时形状信息。
在4-D阵列的情况下,第二维即频道是可广播的。因此,让我们假设您的4-D数组大小为(10,N,20,30)
。现在,您可以对4-D数组和另一个大小为(10,1,20,30)
的数组进行逐元素乘法,而不会重复第二维N
次。这称为广播。现在,您尝试将4-D阵列与另一个大小为(1,N,20,30)
的阵列相乘。这将失败,因为第一个维度不可广播。我希望这很清楚。