Keras summation层表现奇怪,对训练集求和

时间:2017-05-02 09:23:09

标签: tensorflow keras

我无法理解Keras工作的基本方式。我正在试验一个求和层,使用tensorflow作为后端实现为Lambda层:

from keras import backend as K

test_model = Sequential()
test_model.add( Lambda( lambda x: K.sum(x, axis=0), input_shape=(2,3)) )

x = np.reshape(np.arange(12), (2,2,3))
test_model.predict(x)

返回:

array([[  6.,   8.,  10.],
   [ 12.,  14.,  16.]], dtype=float32)

这是非常奇怪的,因为它总结了第一个索引,我的理解对应于训练数据的索引。另外,如果我将轴更改为axis=1,那么总和将取自第二个坐标,这是我期望axis=0得到的。

发生了什么事?为什么axis选择的效果看起来如何将数据传递给lambda图层呢?

1 个答案:

答案 0 :(得分:4)

input_shape是批次的一个样本的形状 如果批次中有200或10000个样本无关紧要,所有样本应为(2,3)。

批次本身就是从一层传递到另一层的内容 批处理包含“n”个样本,每个样本包含input_shape

  • 批次形状则是:(n,2,3) - n个样本,每个样本用input_shape =(2,3)

当需要input_shape时,您不定义“n”,因为当您使用fit或其他训练命令时,将使用batch_size定义“n”。 (在你的例子中,n = 2)

这是原始数组:

[[[ 0  1  2]
  [ 3  4  5]]

 [[ 6  7  8]
  [ 9 10 11]]]

Sample 1 = [ 0  1  2], [ 3  4  5]
Sample 2 = [ 6  7  8], [ 9 10 11]

对索引0(批量大小维度)求和将样本1与样本2求和:

[ 6 8 10], [12 14 16]

对索引1求和将总结一个样本的输入形状的第一维:

[ 3, 5, 7 ], [15, 17, 19]