Керас: Как умножить ()? - PullRequest
       18

Керас: Как умножить ()?

0 голосов
/ 30 сентября 2019

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

enter image description here

Проблема:

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

enter image description here

Как решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 30 сентября 2019

Это зависит от того, как указана форма ввода. В примере 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.]]

3 голосов
/ 30 сентября 2019

Изменить второй массив в последней строке кода как 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
2 голосов
/ 30 сентября 2019

Количество измерений должно совпадать, изменив форму ввода 2-го входа на (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))]))
...