使用 Pytorch 构建 2 层神经网络
Building 2 layer neural network with Pytorch
我正在尝试构建一个简单的2层网络,它有2个输入和1个输出,代码如下:
num_input = 2
num_output = 1
# Input
x1 = torch.rand(1, 2)
# Weights
W1 = torch.rand(2,3)
W2 = torch.rand(3,1)
# biases
b1 = torch.rand(1,3)
b2 = torch.rand(1,1)
# Activation function
def f(inp):
inp[inp >= 0] = 1
inp[inp < 0] = 0
return inp
# Predict output
out = f(torch.mm(x1, W1) + b1)
y=W2*out +b2
print(y)
# Check solution
assert 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
轻松完成所有这些操作,而无需像那样指定权重和偏差。
我正在尝试构建一个简单的2层网络,它有2个输入和1个输出,代码如下:
num_input = 2
num_output = 1
# Input
x1 = torch.rand(1, 2)
# Weights
W1 = torch.rand(2,3)
W2 = torch.rand(3,1)
# biases
b1 = torch.rand(1,3)
b2 = torch.rand(1,1)
# Activation function
def f(inp):
inp[inp >= 0] = 1
inp[inp < 0] = 0
return inp
# Predict output
out = f(torch.mm(x1, W1) + b1)
y=W2*out +b2
print(y)
# Check solution
assert 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
轻松完成所有这些操作,而无需像那样指定权重和偏差。