ValueError:数据基数不明确。请提供具有相同第一维度的数据

Imr*_*ran 5 python machine-learning keras tensorflow

我正在尝试创建一个具有多个输入分支的 keras 模型,但 keras 不喜欢输入具有不同的大小。

这是一个最小的例子:

import numpy as np

from tensorflow import keras
from tensorflow.keras import layers


inputA = layers.Input(shape=(2,))
xA = layers.Dense(8, activation='relu')(inputA)

inputB = layers.Input(shape=(3,))
xB = layers.Dense(8, activation='relu')(inputB)

merged = layers.Concatenate()([xA, xB])

output = layers.Dense(8, activation='linear')(merged)    

model = keras.Model(inputs=[inputA, inputB], outputs=output)


a = np.array([1, 2])
b = np.array([3, 4, 5])    

model.predict([a, b])
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

ValueError: Data cardinality is ambiguous:
  x sizes: 2, 3
Please provide data which shares the same first dimension.
Run Code Online (Sandbox Code Playgroud)

在 keras 中是否有更好的方法来做到这一点?我已经阅读了引用相同错误的其他问题,但我并不真正理解我需要更改什么。

Mar*_*ani 3

您需要以正确的格式传递数组...(n_batch,n_feat)。简单的重塑足以创建批次维度

import numpy as np
from tensorflow import keras
from tensorflow.keras import layers


inputA = layers.Input(shape=(2,))
xA = layers.Dense(8, activation='relu')(inputA)

inputB = layers.Input(shape=(3,))
xB = layers.Dense(8, activation='relu')(inputB)

merged = layers.Concatenate()([xA, xB])

output = layers.Dense(8, activation='linear')(merged)    

model = keras.Model(inputs=[inputA, inputB], outputs=output)


a = np.array([1, 2]).reshape(1,-1)
b = np.array([3, 4, 5]).reshape(1,-1)

model.predict([a, b])
Run Code Online (Sandbox Code Playgroud)

  • 呃。清晨不再有喀拉。 (3认同)