为什么pytorch线性模型不使用sigmoid函数

Rav*_*i R 0 neural-network pytorch

我期望 pytorch 中的线性模型产生sigmoid(WX+b). 但我看到它只是回归Wx+b。为什么会这样呢?

\n

在 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,我确认了输出。为什么会出现这样的差异呢?

\n
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

输出:

\n
model.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

Iva*_*van 6

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)