为什么keras函数“expand_dims”会改变类型?

时间:2017-03-22 23:55:28

标签: theano keras keras-layer

我正在使用带有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)”,这是预期的。

1 个答案:

答案 0 :(得分:1)

命令expand_dims对Theano进行了dimshuffle操作。元组(False, True, False, False)告诉您可广播的维度。你可能知道Numpy的广播能力。它与一些关键的差异相似。

  

来自Theano开发人员:Theano需要在编译之前在图表中声明所有可广播的维度。 NumPy使用运行时形状信息。

有关详细信息,请参阅thisthis

在4-D阵列的情况下,第二维即频道是可广播的。因此,让我们假设您的4-D数组大小为(10,N,20,30)。现在,您可以对4-D数组和另一个大小为(10,1,20,30)的数组进行逐元素乘法,而不会重复第二维N次。这称为广播。现在,您尝试将4-D阵列与另一个大小为(1,N,20,30)的阵列相乘。这将失败,因为第一个维度不可广播。我希望这很清楚。