Keras Dot Axes的问题

时间:2018-06-17 14:43:39

标签: keras axes

我正在尝试使用Keras Dot并出现以下错误。 你能解释一下我做错了吗?

x1 = Input(shape=(2,4))
x2 = Input(shape=(4,))
y1 = dot([x1,x2], axes = (2,1))
modelA = Model(inputs=[x1, x2], outputs=y1)

a1 = np.arange(16).reshape(2,2,4)
a2 = np.array( [1,2,3,4] )

modelA.predict([a1,a2])

---->
ValueError: Error when checking : expected input_40 to have shape (None, 4) but 
got array with shape (4, 1)

1 个答案:

答案 0 :(得分:0)

我也是Keras的新手。以下是我在使用Dot操作之后发现的结果。

首先,输入层的try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeDefault, options: AVAudioSessionPortBuiltInSpeaker) 参数不包括批次大小。在您的代码shape中,因此x2期望输入数据为(None,4),(None表示批处理大小),但是a2为x2 = Input(shape=(4,)),形状为(1、4) ,因此是错误消息。 要消除该错误,您需要将batch_size维度添加到a2。

但是还有一个问题,根据Dot的文档,我认为x1和x2应该具有相同的批处理大小:

  

如果应用于形状为(batch_size,n)的两个张量a和b的列表,则输出将为形状(batch_size,1)的张量,其中每个条目i将是a [i]和a之间的点积b [i]。

所以我手动匹配a1和a2的批量大小,并且a1的批量大小是2,所以a2需要为np.array([1,2,3,4])

现在,您可以得到想要的结果:

np.array([[1,2,3,4],[1,2,3,4]])

对于像我这样的初学者,还有几句话,x1的形状是(batch_size,2,4),x2的形状是(batch_size,4),似乎它们不兼容。现在是“ axes”参数起作用的时候。在OP的代码中,[[ 20. 60.] [100. 140.]]表示点x1的第3轴(索引为0,它是长度为4的轴),x2的第2轴(也是长度为4)。因此它将是[0,1,2,3] dot [1,2,3,4] = 20,[4,5,6,7] dot [1,2,3,4] = 60 ...