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 中是否有更好的方法来做到这一点?我已经阅读了引用相同错误的其他问题,但我并不真正理解我需要更改什么。
您需要以正确的格式传递数组...(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)