MNIST Pytorch 中的验证错误意外增加

2023-11-30

我对整个领域有点陌生,因此决定研究 MNIST 数据集。我几乎改编了整个代码https://github.com/pytorch/examples/blob/master/mnist/main.py,只有一个重大变化:数据加载。我不想使用 Torchvision 中预加载的数据集。所以我用了CSV 格式的 MNIST.

我通过继承 Dataset 并创建一个新的数据加载器来加载 CSV 文件中的数据。 这是相关代码:

mean = 33.318421449829934
sd = 78.56749081851163
# mean = 0.1307
# sd = 0.3081
import numpy as np
from torch.utils.data import Dataset, DataLoader

class dataset(Dataset):
    def __init__(self, csv, transform=None):
        data = pd.read_csv(csv, header=None)
        self.X = np.array(data.iloc[:, 1:]).reshape(-1, 28, 28, 1).astype('float32')
        self.Y = np.array(data.iloc[:, 0])

        del data
        self.transform = transform

    def __len__(self):
        return len(self.X)

    def __getitem__(self, idx):
        item = self.X[idx]
        label = self.Y[idx]

        if self.transform:
            item = self.transform(item)

        return (item, label)

import torchvision.transforms as transforms
trainData = dataset('mnist_train.csv', transform=transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((mean,), (sd,))
]))
testData = dataset('mnist_test.csv', transform=transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((mean,), (sd,))
]))

train_loader = DataLoader(dataset=trainData,
                         batch_size=10, 
                         shuffle=True,
                         )
test_loader = DataLoader(dataset=testData, 
                        batch_size=10, 
                        shuffle=True,
                        )

However this code gives me the absolutely weird training error graph that you see in the picture, and a final validation error of 11% because it classifies everything as a '7'. Validation error graph

我设法将问题追溯到如何标准化数据,如果我使用示例代码中给出的值(0.1307和0.3081)进行transforms.Normalize,并以“uint8”类型读取数据,那么它可以完美地工作。 请注意,有很数据差异最小这是在这两种情况下提供的。对 0 到 1 的值按 0.1307 和 0.3081 进行归一化与对 0 到 255 的值按 33.31 和 78.56 进行归一化具有相同的效果。这些值甚至基本相同(黑色像素在第一种情况下对应于 -0.4241,在第一种情况下对应于 -0.4242)在第二)。

如果您想查看可以清楚地看到此问题的 IPython Notebook,请查看https://colab.research.google.com/drive/1W1qx7IADpnn5e5w97IcxVvmZAaMK9vL3

我无法理解是什么导致了这两种略有不同的数据加载方式的行为如此巨大的差异。任何帮助将不胜感激。


长话短说:你需要改变item = self.X[idx] to item = self.X[idx].copy().

长话短说:T.ToTensor() runs torch.from_numpy,它返回一个张量,它是 numpy 数组内存的别名dataset.X. And T.Normalize() 就地工作,所以每次抽取样本时都有mean减去并除以std,导致数据集降级。

编辑:关于为什么它在原始 MNIST 加载器中工作,兔子洞甚至更深。关键行在MNIST是图像是转变的 into a PIL图像实例。该操作声称仅在缓冲区不连续的情况下进行复制(在我们的例子中),但在hood它会检查它是否被跨步了(确实如此),然后复制它。因此,幸运的是,默认的 torchvision 管道涉及复制,因此就地操作T.Normalize()不会破坏内存self.data of our MNIST实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MNIST Pytorch 中的验证错误意外增加 的相关文章

  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar

随机推荐

  • 在 Rails 中使用 rspec 模拟/存根控制器 recaptcha 方法

    我刚刚学习如何使用存根和模拟 我想模拟以下内容verify recaptcha测试条件的两个结果的方法 我的控制器代码 DogMailsController if verify recaptcha model gt email messag
  • 或者 while 循环 python 中的条件

    or 条件在 python 的 while 循环中起作用吗 我似乎无法让它发挥作用 这是我的代码如何工作的示例 newslot 3 moved False while newslot gt 0 or moved True enabled q
  • python 线程:只有一个 Python 线程正在运行

    我正在使用 python 和 opencv 开发网络摄像头 它似乎在读取第一个和第二个之间出现滞后 所以我想使用python线程来修复它 这是我的代码 from cv2 import from threading import Thread
  • 如何使用 style="display: none;" 在 dropzone.js 上上传文件使用硒?

    我正在尝试在使用 dropzone js 进行文件上传的网站上上传文件 我在表单中找到了文件上传字段 但脚本停止时没有抛出任何错误 我还使用 find elements by id upload input 来确保不存在具有相同 id 的多
  • Prismjs 高亮文件

    我正在尝试使用 Prismjs 突出显示 C 文件https prismjs com index html文件突出显示插件https prismjs com plugins file highlight 所以我尝试
  • 为什么我应该在 JAVA 中使用单独的线程来显示 GUI

    这个简单的问题让我困惑 您可以通过设置框架来显示 JAVA GUI 应用程序setVisible财产true 但在我在互联网上找到的几乎所有示例中 他们都使用单独的线程来执行相同的操作 他们做这样的事情 SwingUtilities inv
  • IIS 8.0 添加 Expires 标头和 Cache-Control

    我可以看到 stackoverflow 添加了两者Expires and Cache Control对于他们的图像 css js 等 所以我正在尝试做同样的事情 我尝试过this article 网络配置
  • CNContactStore 通过电子邮件地址检索联系人

    我想使用联系人框架 IOS 9 来检索与电子邮件地址匹配的联系人 任何帮助将不胜感激 目标C请 谢谢 添加联系人 framework import
  • 如何在WPF中连续播放.gif文件

    我有一个 gif 文件格式 我将其放入 mediaelement 中 动画有效 但如何使该文件连续播放 您可以使用媒体时间轴使动画永远循环的元素
  • 如何精准检测不同浏览器、不同操作系统对HLS的支持?

    根据this答案 测试浏览器播放HLS视频的能力 MIMEapplication x mpegURL可以使用 但这种方法的问题是它会返回maybe适用于 iPhone 实际上支持 HLS 以及适用于 Android 的 Firefox 不支
  • 在 Symfony2 中捕获数据库异常

    我遇到了一个无法缩小范围的随机问题 有时 我会在 Symfony2 应用程序中收到以下错误 未捕获的异常 驱动程序中发生异常 SQLSTATE 08004 1040 连接太多 type 1 file var www symfony vend
  • 与容器相比如何缩放文本大小

    如何根据容器大小缩放文本大小 其他问题表明它不能用CSS来完成 如果不是你会怎么做 这是一种设置文本以适合容器宽度的方法 它的工作原理是逐渐增加隐藏 div 的字体大小 直到它小于您想要容纳文本的容器的宽度 然后将容器的字体大小设置为隐藏
  • 离子构建android错误

    我对 ionic 框架非常陌生 我如何在 Windows 7 系统中启动并运行 cordova 但现在我正在尝试使用 ionic 框架构建一个 android 应用程序 我按照以下步骤操作 gt npm install g cordova
  • 当字段中存在逗号和括号时如何解析逗号分隔的字符串

    我在 C 中有这个字符串 adj con CL2 1 3 0 adj cont CL1 1 3 0 NG NG CL 5 value of CL JK HO 我想使用正则表达式来解析它以获得以下内容 adj con CL2 1 3 0 ad
  • MediaRecorder 延迟 1 秒启动。怎样才能摆脱沉默呢?

    我正在尝试在服务中使用 MediaRecorder 来录制声音 但它在开始时会产生 1 秒的延迟 静音 我该如何摆脱这个 我尝试使用排练录音机还是没有运气 如果有人之前解决过这个问题 请提出建议 Start Intent serviceIn
  • MSSQL - 如何在批量插入中设置默认值?

    我正在尝试从包含以下数据的 csv 文件中获取数据 Employee Name Employee Id Employee Type Joining Date Henry 000123 Permanent 01 01 2011 Mathew
  • NestJs 不在 Docker 内部进行热重载工作

    最小复制代码 示例代码 重现步骤 npm 安装 码头工人组成 预期行为 等待docker容器创建并运行nest 修改main ts文件 nest监听不执行热重加载 包 json dependencies nestjs common 9 0
  • 根据值从列表框中删除项目VBA

    我正在尝试删除用户表单列表框中除特定值之外的所有项目 假设我想删除列表框中除 猫 和 狗 之外的所有内容 I wrote For i 0 To ListBox2 ListCount 1 If ListBox2 List i lt gt Ca
  • 禁用整个 ASP.NET 网站的浏览器缓存

    我正在寻找一种禁用浏览器缓存的方法整个 ASP NET MVC 网站 我找到了以下方法 Response Cache SetCacheability System Web HttpCacheability NoCache Response
  • MNIST Pytorch 中的验证错误意外增加

    我对整个领域有点陌生 因此决定研究 MNIST 数据集 我几乎改编了整个代码https github com pytorch examples blob master mnist main py 只有一个重大变化 数据加载 我不想使用 To