pytorch 问题:如何添加偏置项并提取其值? class 对比顺序模型?和softmax
pytorch questions: how to add bias term and extract its value? class vs sequential model? and softmax
我在 pytorch 中有一个基本的神经网络模型,如下所示:
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(Net, self).__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.sigmoid = nn.Sigmoid()
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
out = self.fc1(x)
out = self.sigmoid(out)
out = self.fc2(out)
return out
net = Net(400, 512,10)
如何从 net.parameters() 中提取 bias/intercept 项?
这个模型是否等同于使用 sequential()?
net = nn.Sequential(nn.Linear(input_dim, hidden_dim[0]),
nn.Sigmoid(),
nn.Linear(hidden_dim[0], hidden_dim[1]),
nn.Sigmoid(),
nn.Linear(hidden_dim[1], output_dim))
nn.Softmax() 在任一模型的末尾是否可选用于 multi-class classification?如果我理解正确,使用软件它输出某个 class 的概率但没有它 returns 预测输出?
在此先感谢您回答我的新手问题。
你可以state_dict提取模型中每个层或函数的偏差。
你的网络的两个礼物是相同的,但如果你想做一些网络扩展,我建议使用 Net one 而不是 Sequential One
WithOut softmax 它只会输出一个张量 min -1 max 1 如果使用 sigmoid ,它不能是预测。
无论如何,您应该单独回答您的问题,而不是一个 post 三个问题。祝你好运
让我们一一解答。 is this model equivalent to using sequential()
简短回答:没有。你可以看到你已经添加了两个 Sigmoid 层和两个线性层。您可以打印您的网络并查看结果:
net = Net(400, 512,10)
print(net.parameters())
print(net)
input_dim = 400
hidden_dim = 512
output_dim = 10
model = Net(400, 512,10)
net = nn.Sequential(nn.Linear(input_dim, hidden_dim),
nn.Sigmoid(),
nn.Linear(hidden_dim, hidden_dim),
nn.Sigmoid(),
nn.Linear(hidden_dim, output_dim))
print(net)
输出为:
Net(
(fc1): Linear(in_features=400, out_features=512, bias=True)
(sigmoid): Sigmoid()
(fc2): Linear(in_features=512, out_features=10, bias=True)
)
Sequential(
(0): Linear(in_features=400, out_features=512, bias=True)
(1): Sigmoid()
(2): Linear(in_features=512, out_features=512, bias=True)
(3): Sigmoid()
(4): Linear(in_features=512, out_features=10, bias=True)
)
希望您能看出它们的不同之处。
你的第一个问题:How can I extract bias/intercept term from net.parameters()
答案:
model = Net(400, 512,10)
bias = model.fc1.bias
print(bias)
输出是:
tensor([ 3.4078e-02, 3.1537e-02, 3.0819e-02, 2.6163e-03, 2.1002e-03,
4.6842e-05, -1.6454e-02, -2.9456e-02, 2.0646e-02, -3.7626e-02,
3.5531e-02, 4.7748e-02, -4.6566e-02, -1.3317e-02, -4.6593e-02,
-8.9996e-03, -2.6568e-02, -2.8191e-02, -1.9806e-02, 4.9720e-02,
---------------------------------------------------------------
-4.6214e-02, -3.2799e-02, -3.3605e-02, -4.9720e-02, -1.0293e-02,
3.2559e-03, -6.6590e-03, -1.2456e-02, -4.4547e-02, 4.2101e-02,
-2.4981e-02, -3.6840e-03], requires_grad=True)
我在 pytorch 中有一个基本的神经网络模型,如下所示:
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(Net, self).__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.sigmoid = nn.Sigmoid()
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
out = self.fc1(x)
out = self.sigmoid(out)
out = self.fc2(out)
return out
net = Net(400, 512,10)
如何从 net.parameters() 中提取 bias/intercept 项? 这个模型是否等同于使用 sequential()?
net = nn.Sequential(nn.Linear(input_dim, hidden_dim[0]),
nn.Sigmoid(),
nn.Linear(hidden_dim[0], hidden_dim[1]),
nn.Sigmoid(),
nn.Linear(hidden_dim[1], output_dim))
nn.Softmax() 在任一模型的末尾是否可选用于 multi-class classification?如果我理解正确,使用软件它输出某个 class 的概率但没有它 returns 预测输出?
在此先感谢您回答我的新手问题。
你可以state_dict提取模型中每个层或函数的偏差。
你的网络的两个礼物是相同的,但如果你想做一些网络扩展,我建议使用 Net one 而不是 Sequential One
WithOut softmax 它只会输出一个张量 min -1 max 1 如果使用 sigmoid ,它不能是预测。
无论如何,您应该单独回答您的问题,而不是一个 post 三个问题。祝你好运
让我们一一解答。 is this model equivalent to using sequential()
简短回答:没有。你可以看到你已经添加了两个 Sigmoid 层和两个线性层。您可以打印您的网络并查看结果:
net = Net(400, 512,10)
print(net.parameters())
print(net)
input_dim = 400
hidden_dim = 512
output_dim = 10
model = Net(400, 512,10)
net = nn.Sequential(nn.Linear(input_dim, hidden_dim),
nn.Sigmoid(),
nn.Linear(hidden_dim, hidden_dim),
nn.Sigmoid(),
nn.Linear(hidden_dim, output_dim))
print(net)
输出为:
Net(
(fc1): Linear(in_features=400, out_features=512, bias=True)
(sigmoid): Sigmoid()
(fc2): Linear(in_features=512, out_features=10, bias=True)
)
Sequential(
(0): Linear(in_features=400, out_features=512, bias=True)
(1): Sigmoid()
(2): Linear(in_features=512, out_features=512, bias=True)
(3): Sigmoid()
(4): Linear(in_features=512, out_features=10, bias=True)
)
希望您能看出它们的不同之处。
你的第一个问题:How can I extract bias/intercept term from net.parameters()
答案:
model = Net(400, 512,10)
bias = model.fc1.bias
print(bias)
输出是:
tensor([ 3.4078e-02, 3.1537e-02, 3.0819e-02, 2.6163e-03, 2.1002e-03,
4.6842e-05, -1.6454e-02, -2.9456e-02, 2.0646e-02, -3.7626e-02,
3.5531e-02, 4.7748e-02, -4.6566e-02, -1.3317e-02, -4.6593e-02,
-8.9996e-03, -2.6568e-02, -2.8191e-02, -1.9806e-02, 4.9720e-02,
---------------------------------------------------------------
-4.6214e-02, -3.2799e-02, -3.3605e-02, -4.9720e-02, -1.0293e-02,
3.2559e-03, -6.6590e-03, -1.2456e-02, -4.4547e-02, 4.2101e-02,
-2.4981e-02, -3.6840e-03], requires_grad=True)