Rav*_*i R 0 neural-network pytorch
我期望 pytorch 中的线性模型产生sigmoid(WX+b)
. 但我看到它只是回归Wx+b
。为什么会这样呢?
在 Udacity “Intro to Deep Learning with pytorch” -> Lesson 2: Introduction to Neural Networks 中,他们说输出是 sigmoid:
\n\xcc\x82 =(11+22+)\n
Run Code Online (Sandbox Code Playgroud)\n从下面的代码中,我预计 y cap 为 0.38391371665752183,但这只是 的值WX+b
,我确认了输出。为什么会出现这样的差异呢?
import torch\nfrom torch import nn\nimport numpy as np\n\ntorch.manual_seed(0)\nmodel = nn.Linear(2,1)\nw1 = model.weight.detach().numpy()\nb1 = model.bias.detach().numpy()\nprint (f'model.weight = {w1}, model.bias={b1}')\nx = torch.tensor([[0.2877, 0.2914]])\nprint(f'model predicted {model(x)}')\nz = x.numpy()[0][0] * w1[0][0] + x.numpy()[0][1] * w1 [0][1] + b1[0]\nprint(f'manual multiplication yielded {z}')\nycap = 1/(1+ np.exp(-z))\nprint(f'y cap is {ycap}')\n
Run Code Online (Sandbox Code Playgroud)\n输出:
\nmodel.weight = [[-0.00529398 0.3793229 ]], model.bias=[-0.58198076]\nmodel predicted tensor([[-0.4730]], grad_fn=<AddmmBackward>)\nmanual multiplication yielded -0.4729691743850708\ny cap is 0.38391371665752183\n
Run Code Online (Sandbox Code Playgroud)\n
该nn.Linear
层是线性全连接层。它对应的是wX+b
,不是 sigmoid(WX+b)
。
顾名思义,它是一个线性函数。您可以将其视为矩阵乘法(有或没有偏差)。因此它没有附加激活函数(即非线性)。
如果您想向其附加激活函数,可以通过定义顺序模型来实现:
model = nn.Sequential(
nn.Linear(2, 1)
nn.Sigmoid()
)
Run Code Online (Sandbox Code Playgroud)
编辑- 如果您想确保:
x = torch.tensor([[0.2877, 0.2914]])
model = nn.Linear(2,1)
m1 = nn.Sequential(model, nn.Sigmoid())
m1(x)[0].item(), torch.sigmoid(model(x))[0].item()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4715 次 |
最近记录: |