То, что вы хотите сделать, называется Broadcasting . В numpy вы можете умножать таким образом, но только если формы соответствуют в соответствии с некоторыми ограничениями:
Начиная справа, каждый компонент каждого массива shape
должен быть равен 1
или не существует
, поэтому прямо сейчас у вас есть:
W.shape = (32, 5, 20)
b.shape = (5,)
, поскольку 20 и 5 не совпадают, они не могут быть переданы.
Если бы вы Имеет:
W.shape = (32, 5, 20)
b.shape = (5, 1 )
20
будет соответствовать 1
(1
всегда в порядке), и 5
будут совпадать, и вы можете умножить их.
Чтобы получить b
форму (5, 1)
, вы можете либо сделать .reshape(5, 1)
(или, более надежно, .reshape(-1, 1)
), либо создать модный индекс с [:, None]
Таким образом, любая из этих работ:
W * b[:,None] #yatu's answer
W * b.reshape(-1, 1)