首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras Dot轴问题

Keras Dot轴问题
EN

Stack Overflow用户
提问于 2018-06-17 14:43:38
回答 1查看 2K关注 0票数 0

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

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2019-07-08 06:26:12

我对凯拉斯也很陌生。下面是我在玩Dot操作后得出的结论。

首先,输入层的shape参数不包括批量大小。在您的代码中,x2 = Input(shape=(4,)),所以x2期望输入数据为(None,4),(None指批处理大小),但是a2是np.array([1,2,3,4]),形状是(1,4),因此出现了错误消息。要消除错误,需要将batch_size维度添加到a2中。

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

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

因此,我手动匹配a1和a2的批处理大小,而a1的批处理大小为2,因此a2需要为np.array([[1,2,3,4],[1,2,3,4]])

现在你可以得到你渴望的结果:

[[ 20. 60.] [100. 140.]]

对于像我这样的初学者来说,还有几个词,x1的形状是(batch_size,2,4),x2的形状是(batch_size,4),它们似乎不兼容。现在是“轴”参数起作用的时候了。在OP的代码中,axes=(2,1)的意思是点x1的第三轴(0-索引,它是长度为4的轴),和x2的第二轴(也是长度为4)。所以会是0,1,2,3dot1,2,3,4=20,4,5,6,7dot1,2,3,4=60 .

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50897701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档