Keras点轴问题
我试图使用KerasKeras点轴问题,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的新手。下面是
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]的点积有趣的是,一个未记录的特性允许将负整数设置为点层的轴参数,然后模型在编译期间自行训练轴的维度。