PyTorch正向传播在相同样本上返回不同的logit

us

考虑以下针对MNIST的LeNet模型

import torch
from torch import nn
import torch.nn.functional as F

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(1, 20, 5, 1)
        self.conv2 = nn.Conv2d(20, 50, 5, 1)
        self.fc1 = nn.Linear(4*4*50, 500)
        self.fc2 = nn.Linear(500, 10)
        self.ceriation = nn.CrossEntropyLoss()
    def forward(self, x):
        x = self.conv1(x)
        x = F.max_pool2d(x, 2, 2)
        x = F.relu(x)
        x = self.conv2(x)
        x = F.max_pool2d(x, 2, 2)
        x = F.relu(x)
        x = x.view(-1, 4*4*50)
        x = self.fc1(x)
        x = self.fc2(x)
        return x

现在,我使用此模型对一批样品进行单步前进,例如

network=LeNet()
optimizer = torch.optim.SGD(self.network.parameters(), lr=0.001, momentum=0.9)
device = torch.device("cpu")
network.to(device)
network.train()
optimizer.zero_grad()
# X_batch= ... some batch of 50 samples pulled from a train_loader defined as
# torch.manual_seed(42)
# training_set = datasets.MNIST('./mnist_data', train=True, download=False, 
#                               transform=transforms.Compose([
#                                   transforms.ToTensor(),
#                                   transforms.Normalize((0.1307,), (0.3081,))]))
# train_loader = torch.utils.data.DataLoader(training_set, 
#                                            batch_size=50, 
#                                            shuffle=False)
logits = network(X_batch)

请注意,shuffle=Falsedownload=False为因为数据集的装载机已经下载了,我不想洗牌。我的问题是,如果我两次运行此代码,我将获得不同的值,logits而且我不明白为什么,因为其他所有内容似乎都没有改变。为了进行额外检查,我还提取X_batch了一个numpy数组,并验证了这批样本与先前执行的样本完全相同。我用numpy.array_equal()功能进行此检查

除非存在精度问题,否则我真的无法弄清楚这里缺少什么。

亚历山大·皮沃瓦罗夫

原因是因为每次运行此代码时,您都会调用

network = LeNet()

最终对网络的权重进行了不同的随机初始化。如果您在此之前设置了随机种子,例如:

torch.manual_seed(42)
network = LeNet()

那么如果您使用相同的数据作为输入,那么在第一步上应该会获得相同的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pytorch Train&Eval不同样本大小

不同样本上的多对多lstm模型

Shapiro Wilk检验中具有相同结果的两个不同样本

LDA:类别中的不同样本量

了解nn.Linear在PyTorch中的正向传播的用法

如何比较不同样本量的不同群体?

批量归一化:固定样本还是按维度划分的不同样本?

向量化正向传播

PyTorch:定义的层不参与正向传播,但会影响损耗值

Jmeter样本计数请求与相同的设置不同

为 dplyr 中的每个组创建具有相同样本大小的数据框

较少-具有相同样式的多个不同类?

React 中相同样式组件的不同背景图像

如何在python中从每个值都有不同样本大小的数据框中过滤出随机样本?

神经网络中具有不同样本量的多个输入

相同的xpath在Centos,Ubuntu上返回不同的值

具有相同内容和相同样式的Div的虚线边框不同

有没有一种方法可以针对R中的不同样本量复制函数?

如何为 R 中的功率分析生成具有不同样本大小的负二项分布?

在不同类型上使用相同的方法,并在Go中返回不同的类型值

Facebook Graph API 在不同的脚本上返回不同的响应,但相同的 - 非无效 - 令牌

为什么我的`train_test_split()` 返回相同的样本

pytorch:相同输入的向量乘法结果不同

正向与反向模式差异-Pytorch

为什么这些具有相同样式标签的页面产生不同的字体大小?

是否可以有两种具有不同值的相同样式?

Audioread和Audioinfo返回的样本总数不同吗?

如何在不同大小的图层上执行反向传播?

在两个不同大小的移动设备上返回相同的 x 和 y 坐标