Keras点轴问题

Keras点轴问题,keras,axes,Keras,Axes,我试图使用KerasDot,但出现以下错误。 你能解释一下我做错了什么吗 x1=输入(形状=(2,4)) x2=输入(形状=(4,)) y1=点([x1,x2],轴=(2,1)) 模型A=模型(输入=[x1,x2],输出=y1) a1=np.arange(16)。重塑(2,2,4) a2=np.数组([1,2,3,4]) 模型A.预测([a1,a2]) ----> ValueError:检查时出错:预期输入_40具有形状(无,4),但 已获得形状为(4,1)的数组 我也是Keras的新手。下面是

我试图使用Keras
Dot
,但出现以下错误。 你能解释一下我做错了什么吗

x1=输入(形状=(2,4))
x2=输入(形状=(4,))
y1=点([x1,x2],轴=(2,1))
模型A=模型(输入=[x1,x2],输出=y1)
a1=np.arange(16)。重塑(2,2,4)
a2=np.数组([1,2,3,4])
模型A.预测([a1,a2])
---->
ValueError:检查时出错:预期输入_40具有形状(无,4),但
已获得形状为(4,1)的数组

我也是Keras的新手。下面是我在玩了点运算后得出的结论

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

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

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

所以我手动匹配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的代码中,
轴=(2,1)
表示点x1的第三轴(0索引,它是长度为4的轴),点x2的第二轴(长度也是4)。所以它将是[0,1,2,3]点[1,2,3,4]=20,[4,5,6,7]点[1,2,3,4]=60…

我对Keras也是新手。下面是我在玩了点运算后得出的结论

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

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

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

所以我手动匹配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的代码中,
轴=(2,1)
表示点x1的第三轴(0索引,它是长度为4的轴),点x2的第二轴(长度也是4)。因此它将是[0,1,2,3]点[1,2,3,4]=20,[4,5,6,7]点[1,2,3,4]=60…

输入张量的形状与计算点积不兼容
x1
是形状的张量
(无,2,4)
x2
是形状的张量
(无,4)
(两者均
None
指批次维度)。那么你想如何计算这两个张量之间的点积呢?即使可以,
a2
是形状的张量
(4,1)
,因此与
x2
指定的形状不兼容;这就是错误想要表达的意思。谢谢。例如a1=[[01123][4567][[891011][12131415]]和a2=[1,2,3,4],我想得到[[20,60][100140]]。20来自[01 2 3]和[1 2 3 4]的点积,60来自[4 5 6 7]和[1 2 3 4]的点积。类似地,100、140来自[8 9 10 11],[12 13 14 15]和[1 2 3 4]的点积有趣的是,一个未记录的特性允许将负整数设置为点层的轴参数,然后模型在编译过程中自行训练轴的维数。输入张量的形状与计算点积不兼容。
x1
是形状的张量
(无,2,4)
x2
是形状的张量
(无,4)
(两者都
None
表示批次维度)。那么,您想如何计算这两个张量之间的点积呢?即使可以,
a2
也是形状的张量
(4,1)
因此与指定的
x2
形状不兼容;这就是错误试图传达的内容。谢谢。例如a1=[[[01123][4567][[891011][12131415]]和a2=[1,2,3,4],我想得到[[20,60][100140]]。20来自[0123]和[1234]的点积[,60来自[4 5 6 7]和[1 2 3 4]的点积。类似地,100,140来自[8 9 10 11],[12 13 14 15]和[1 2 3 4]的点积有趣的是,一个未记录的特性允许将负整数设置为点层的轴参数,然后模型在编译期间自行训练轴的维度。