我正在尝试构建一个简单的2层网络,它有2个输入和1个输出,代码如下:
num_input = 2num_output = 1# Inputx1 = torch.rand(1, 2)# WeightsW1 = torch.rand(2,3)W2 = torch.rand(3,1)# biasesb1 = torch.rand(1,3)b2 = torch.rand(1,1)# Activation functiondef f(inp): inp[inp >= 0] = 1 inp[inp < 0] = 0 return inp# Predict outputout = f(torch.mm(x1, W1) + b1)y=W2*out +b2print(y)# Check solutionassert list(y.size()) == [1, num_output], f"Incorrect output size ({y.size()})"print("nice!")
从这段代码中,我总是得到错误的输出大小,有人能给我一些提示吗,我怎样才能得到正确的输出大小?
回答:
y=out@W2 +b2
你之前进行的是逐元素乘法,这并没有如你所愿改变输出的尺寸。
需要明确的是,python 3.5
及以上版本可以使用这个”@”语法 – 它与torch.mm()
做的是同样的事情 – 即矩阵乘法。
尺寸:(现在)
现在你有(1,2)
的输入乘以(2,3)
的权重,并加上(1,3)
的偏置。形状是(1,3)
,然后你用(1,3)
和(3,1)
进行矩阵乘法,输出是(1,1)
,再加上偏置,使最终输出大小为(1,1)
。
尺寸(之前)
附注:
你也可以使用nn.Linear
来轻松执行所有这些操作,而无需像那样指定权重和偏置。