我是深度学习的新手,正在Udacity上学习。
我在构建神经网络的代码中遇到了一种情况,其中两个张量被相加,特别是’偏置’张量与张量乘积的输出相加。
代码大致是这样的…
def activation(x):return (1/(1+torch.exp(-x)))inputs = images.view(images.shape[0], -1)w1 = torch.randn(784, 256)b1 = torch.randn(256)h = activation(torch.mm(inputs,w1) + b1)
在将MNIST展平后,输入的维度变成了[64,784]。
我不明白的是,维度为[256]的偏置张量(b1)是如何与’inputs’和’w1’的乘积相加的,后者的维度为[256, 64]。
回答:
简单来说,每当我们使用Python库(如Numpy或PyTorch)的“广播”功能时,我们实际上是在维度上使我们的数组(权重,偏置)兼容。
换句话说,如果你操作的W的形状是[256,64],而你的偏置只有[256],那么广播会补充那个缺少的维度。
如上图所示,左侧的维度被填充,这样我们的操作就可以成功进行。希望这对你有帮助