【问题标题】:tensor dot product in keraskeras中的张量点积
【发布时间】:2019-11-26 16:02:48
【问题描述】:

我是 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]]) 

【问题讨论】:

    标签: python keras tensor dot-product


    【解决方案1】:

    Keras 等待获取您的一批输入。如果您有 N 个维度为 4 的输入,则类似于大小为 N*4 的向量。因此,如果您想发送单个向量,则它的维度应为 1*4 而不是 4。 所以你有两个选择:

    1. 改变

      a1 = np.arange(4) a2=np.arange(4)

    a1 = np.arange(1,4)
    a2=np.arange(1,4)
    
    1. 或尝试model.predict([[a1],[a2]])。应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 2020-08-23
      • 2017-01-30
      • 1970-01-01
      • 2017-04-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多