Keras:如何乘法()?

Keras: How to Multiply()?

TensorFlow 2.0 RC1

import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Multiply

import numpy as np

预期输出:

Multiply()([np.array([1,2,3,4,4,4]).reshape(2,3), np.array([1,0])])

问题:

input_1 = Input(shape=(None,3))
mask_1 = Input(shape=(None,))

net = Multiply()([input_1, mask_1])
net = Model(inputs=[input_1, mask_1], outputs=net)

net.predict([np.array([1,2,3,4,4,4]).reshape(1,2,3), np.array([1,0]).reshape(1,2)]) # 1 = batch size

如何解决这个问题?

将最后一行代码中的第二个数组重塑为np.array([1,0]).reshape(-1)

net.predict([np.array([1,2,3,4,4,4]).reshape(1,2,3), np.array([1,0]).reshape(-1)]) # 1 = batch size

这取决于输入形状的指定方式。在 Multiply() 示例(逐元素乘法)中,批量大小为 2,输入的特征大小为 3,掩码的特征大小为 1。所以,在Keras中指定输入形状时,只需要指定特征尺寸即可。

input_1 = Input(shape=(3,))
mask_1 = Input(shape=(1,))
net = Multiply()([input_1, mask_1])
net = Model(inputs=[input_1, mask_1], outputs=net)
output = net.predict([np.array([1,2,3,4,4,4]).reshape(2,3), np.array([1,0])])
print(output)

[[1. 2. 3.] [0。 0. 0.]]

维数应匹配,方法是将第二个输入的输入形状修改为 (None, 1) 并向 [1, 0] 数组添加一个额外维

import numpy as np
from tensorflow.keras.layers import Multiply
from tensorflow.keras import Model, Input

input_1 = Input(shape=(2,3))
mask_1 = Input(shape=(2,1))

net = Multiply()([input_1, mask_1])
net = Model(inputs=[input_1, mask_1], outputs=net)

net.summary()

print(net.predict([np.array([1,2,3,4,4,4]).reshape((1,2,3)), np.array([1,0]).reshape((1,2,1))]))