keras中的张量点积
tensor dot product in keras
我是 keras 的新手,在理解 keras.layers.Dot() 层时遇到了一些问题。
我正在尝试计算两个向量的点积。
from keras.layers import Input, Dot
from keras.models import Model
import numpy as np
x1 = Input(shape=(4,))
x2 = Input(shape=(4,))
y1 = Dot(axes=1)([x1,x2])
model = Model(inputs=[x1, x2], outputs=y1)
a1 = np.arange(4)
a2=np.arange(4)
model.predict([a1,a2])
我希望输出为 14=0+1^2+2^2+3^2。但是,我收到如下错误消息:
ValueError: Error when checking input: expected input_46 to have shape (4,) but got array with shape (1,)
我试了运行model.get_config()
,下面是模型图的相应信息。可以看到input_46是x1,input_47是x2。
{'name': 'model_19',
'layers': [{'name': 'input_46',
'class_name': 'InputLayer',
'config': {'batch_input_shape': (None, 4),
'dtype': 'float32',
'sparse': False,
'name': 'input_46'},
'inbound_nodes': []},
{'name': 'input_47',
'class_name': 'InputLayer',
'config': {'batch_input_shape': (None, 4),
'dtype': 'float32',
'sparse': False,
'name': 'input_47'},
'inbound_nodes': []},
{'name': 'dot_20',
'class_name': 'Dot',
'config': {'name': 'dot_20',
'trainable': True,
'axes': 1,
'normalize': False},
'inbound_nodes': [[['input_46', 0, 0, {}], ['input_47', 0, 0, {}]]]}],
'input_layers': [['input_46', 0, 0], ['input_47', 0, 0]],
'output_layers': [['dot_20', 0, 0]]}
我有什么地方做错了吗?谢谢!
更新
以下代码有效:
x1 = Input(shape=(4,))
x2 = Input(shape=(4,))
y1 = Dot(axes=1)([x1,x2])
model = Model(inputs=[x1, x2], outputs=y1)
a1 = np.arange(4).reshape(1,4)
a2=np.arange(4).reshape(1,4)
model.predict([a1,a2])
或
from keras.layers import Input, Dot
from keras.models import Model
import numpy as np
x1 = Input(shape=(4,))
x2 = Input(shape=(4,))
y1 = Dot(axes=1)([x1,x2])
model = Model(inputs=[x1, x2], outputs=y1)
a1 = np.arange(4)
a2=np.arange(4)
model.predict([[a1],[a2]])
Keras 正在等待获取您的一批输入。如果你有 N 个维度为 4 的输入,就像一个大小为 N*4 的向量。所以如果你想发送一个向量,它应该在 1*4 的维度而不是 4。
所以你有两个选择:
改变
a1 = np.arange(4)
a2=np.arange(4)
到
a1 = np.arange(1,4)
a2=np.arange(1,4)
- 或尝试
model.predict([[a1],[a2]])
。应该可以解决您的问题。
我是 keras 的新手,在理解 keras.layers.Dot() 层时遇到了一些问题。
我正在尝试计算两个向量的点积。
from keras.layers import Input, Dot
from keras.models import Model
import numpy as np
x1 = Input(shape=(4,))
x2 = Input(shape=(4,))
y1 = Dot(axes=1)([x1,x2])
model = Model(inputs=[x1, x2], outputs=y1)
a1 = np.arange(4)
a2=np.arange(4)
model.predict([a1,a2])
我希望输出为 14=0+1^2+2^2+3^2。但是,我收到如下错误消息:
ValueError: Error when checking input: expected input_46 to have shape (4,) but got array with shape (1,)
我试了运行model.get_config()
,下面是模型图的相应信息。可以看到input_46是x1,input_47是x2。
{'name': 'model_19',
'layers': [{'name': 'input_46',
'class_name': 'InputLayer',
'config': {'batch_input_shape': (None, 4),
'dtype': 'float32',
'sparse': False,
'name': 'input_46'},
'inbound_nodes': []},
{'name': 'input_47',
'class_name': 'InputLayer',
'config': {'batch_input_shape': (None, 4),
'dtype': 'float32',
'sparse': False,
'name': 'input_47'},
'inbound_nodes': []},
{'name': 'dot_20',
'class_name': 'Dot',
'config': {'name': 'dot_20',
'trainable': True,
'axes': 1,
'normalize': False},
'inbound_nodes': [[['input_46', 0, 0, {}], ['input_47', 0, 0, {}]]]}],
'input_layers': [['input_46', 0, 0], ['input_47', 0, 0]],
'output_layers': [['dot_20', 0, 0]]}
我有什么地方做错了吗?谢谢!
更新
以下代码有效:
x1 = Input(shape=(4,))
x2 = Input(shape=(4,))
y1 = Dot(axes=1)([x1,x2])
model = Model(inputs=[x1, x2], outputs=y1)
a1 = np.arange(4).reshape(1,4)
a2=np.arange(4).reshape(1,4)
model.predict([a1,a2])
或
from keras.layers import Input, Dot
from keras.models import Model
import numpy as np
x1 = Input(shape=(4,))
x2 = Input(shape=(4,))
y1 = Dot(axes=1)([x1,x2])
model = Model(inputs=[x1, x2], outputs=y1)
a1 = np.arange(4)
a2=np.arange(4)
model.predict([[a1],[a2]])
Keras 正在等待获取您的一批输入。如果你有 N 个维度为 4 的输入,就像一个大小为 N*4 的向量。所以如果你想发送一个向量,它应该在 1*4 的维度而不是 4。 所以你有两个选择:
改变
a1 = np.arange(4) a2=np.arange(4)
到
a1 = np.arange(1,4)
a2=np.arange(1,4)
- 或尝试
model.predict([[a1],[a2]])
。应该可以解决您的问题。