今天在看网上的视频学习深度学习的时候,用到了CIFAR-10数据集。当我兴高采烈的运行代码时,却发现了一些错误:

# -*- coding: utf-8 -*-

import pickle as p

import numpy as np import os def load_CIFAR_batch(filename): """ 载入cifar数据集的一个batch """ with open(filename, 'r') as f: datadict = p.load(f) X = datadict['data'] Y = datadict['labels'] X = X.reshape(10000, 3, 32, 32).transpose(0, 2, 3, 1).astype("float") Y = np.array(Y) return X, Y def load_CIFAR10(ROOT): """ 载入cifar全部数据 """ xs = [] ys = [] for b in range(1, 6): f = os.path.join(ROOT, 'data_batch_%d' % (b,)) X, Y = load_CIFAR_batch(f) xs.append(X) ys.append(Y) Xtr = np.concatenate(xs) Ytr = np.concatenate(ys) del X, Y Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch')) return Xtr, Ytr, Xte, Yte

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

错误代码如下:

'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence

1

于是乎开始各种搜索问题,问大佬,网上的答案都是类似:

然而并没有解决问题!还是错误的!(我大概搜索了一下午吧,都是上面的答案)

哇,就当我很绝望的时候,我终于发现了一个新奇的答案,抱着试一试的态度,尝试了一下:

def load_CIFAR_batch(filename):

""" 载入cifar数据集的一个batch """ with open(filename, 'rb') as f: datadict = p.load(f, encoding='latin1') X = datadict['data'] Y = datadict['labels'] X = X.reshape(10000, 3, 32, 32).transpose(0, 2, 3, 1).astype("float") Y = np.array(Y) return X, Y

1

2

3

4

5

6

7

8

9

10

竟然成功了,这里没有报错了!欣喜之余,我就很好奇,encoding=’latin1’到底是啥玩意呢,以前没有见过啊?于是,我搜索了一下,了解到:

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。

还没等我高兴起来,运行后,又发现了一个问题:

memory error

1

什么鬼?内存错误!哇,原来是数据大小的问题。

X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("float")

1

这告诉我们每批数据都是10000 * 3 * 32 * 32,相当于超过3000万个浮点数。 float数据类型实际上与float64相同,意味着每个数字大小占8个字节。这意味着每个批次占用至少240 MB。你加载6这些(5训练+ 1测试)在总产量接近1.4 GB的数据。

for b in range(1,2):

f = os.path.join(ROOT, 'data_batch_%d' % (b,)) X, Y = load_CIFAR_batch(f) xs.append(X) ys.append(Y)

1

2

3

4

5

所以如有可能,如上代码所示只能一次运行一批。

到此为止,错误基本搞定,下面贴出正确代码:

# -*- coding: utf-8 -*-

import pickle as p

import numpy as np import os def load_CIFAR_batch(filename): """ 载入cifar数据集的一个batch """ with open(filename, 'rb') as f: datadict = p.load(f, encoding='latin1') X = datadict['data'] Y = datadict['labels'] X = X.reshape(10000, 3, 32, 32).transpose(0, 2, 3, 1).astype("float") Y = np.array(Y) return X, Y def load_CIFAR10(ROOT): """ 载入cifar全部数据 """ xs = [] ys = [] for b in range(1, 2): f = os.path.join(ROOT, 'data_batch_%d' % (b,)) X, Y = load_CIFAR_batch(f) xs.append(X) #将所有batch整合起来 ys.append(Y) Xtr = np.concatenate(xs) #使变成行向量,最终Xtr的尺寸为(50000,32,32,3) Ytr = np.concatenate(ys) del X, Y Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch')) return Xtr, Ytr, Xte, Yte

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import numpy as np

from julyedu.data_utils import load_CIFAR10

import matplotlib.pyplot as plt plt.rcParams['figure.figsize'] = (10.0, 8.0) plt.rcParams['image.interpolation'] = 'nearest' plt.rcParams['image.cmap'] = 'gray' # 载入CIFAR-10数据集 cifar10_dir = 'julyedu/datasets/cifar-10-batches-py' X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir) # 看看数据集中的一些样本:每个类别展示一些 print('Training data shape: ', X_train.shape) print('Training labels shape: ', y_train.shape) print('Test data shape: ', X_test.shape) print('Test labels shape: ', y_test.shape)

顺便看一下CIFAR-10数据组成:

cifar10 c语言,Python3读取深度学习CIFAR-10数据集出现的若干问题解决相关推荐

  1. R语言神经网络与深度学习(一)

    #R语言神经网络与深度学习(一) #画出ReLU函数 x=seq(-1,1,0.1)   #生成x变量,赋值-1~1等差数列 relu=function(x) ifelse(x>0,x,0)   ...

  2. 【CIPS 2016】(4-5章)语言认知模型、语言表示以及深度学习(研究进展、现状趋势)

    CIPS 2016 笔记整理 <中文信息处理发展报告(2016)>是中国中文信息学会召集专家对本领域学科方 向和前沿技术的一次梳理,官方定位是深度科普,旨在向政府.企业.媒体等对中文 信息 ...

  3. 结合语言知识和深度学习的中文文本情感分析方法

    结合语言知识和深度学习的中文文本情感分析方法 徐康庭, 宋威 北方工业大学信息学院 摘要:在目前的中文文本情感分析研究中,基于语义规则和情感词典的方法通常需要人工设置情感阈值:而基于深度学习的方法由于 ...

  4. 转载【数据集】计算机视觉,深度学习,数据挖掘数据集整理

    金融 美国劳工部统计局官方发布数据 上证A股日线数据,1999.12.09 至 2016.06.08,前复权,1095支股票 深证A股日线数据,1999.12.09 至 2016.06.08,前复权, ...

  5. 二十五个深度学习相关公开数据集

    转 [干货]二十五个深度学习相关公开数据集 2018年04月18日 13:42:53 阅读数:758 (选自Analytics Vidhya:作者:Pranav Dar:磐石编译) 目录 介绍 图像处 ...

  6. 深度学习常用的数据集,包括各种数据跟图像数据。

    1.   免费数据集下载(持续更新中...) 2.[导读] "大数据时代",数据为王!无论是数据挖掘还是目前大热的深度学习领域都离不开"大数据".大公司们一般会 ...

  7. 数据集大全:25个深度学习的开放数据集

    介绍 深度学习的关键是训练.无论是从图像处理到语音识别,每个问题都有其独特的细微差别和方法. 但是,你可以从哪里获得这些数据?现在你看到的很多研究论文都使用专有数据集,而这些数据集通常不会向公众发布. ...

  8. 【人工智能项目】深度学习实现10类猴子细粒度识别

    [人工智能项目]深度学习实现10类猴子细粒度识别 任务说明 本次比赛需要选手准确识别10种猴子,数据集只有图片,没有boundbox等标注数据. 环境说明 !nvidia-smi Fri Mar 27 ...

  9. 25个用于深度学习的开放数据集

    25个用于深度学习的开放数据集每个数据科学家必须使用 PRANAV DAR, 2018年3月29日 转载自:https://www.analyticsvidhya.com/blog/2018/03/c ...

最新文章

  1. 支配vue框架模版语法之v-cloak
  2. [Google Guava] 2.4-集合扩展工具类
  3. A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪
  4. [转]浅析Tomcat、JBOSS、WebSphere、WebLogic、Apache
  5. JEECG 技术交流群
  6. Java分页详细步骤
  7. windows是第几代计算机,Win7一个月后将被官方淘汰!历代微软系统哪个是你的青春?...
  8. 软件测试的目的和原则
  9. ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.9/main: DNS lookup error
  10. 《当程序员的那些狗日日子》(二十三)死在了今天的晚上
  11. 2021年大连12中高考成绩查询,2021大连市地区高考成绩排名查询,大连市高考各高中成绩喜报榜单...
  12. w10计算机运行特别卡,win10很卡?教你4大技巧,降低CPU占用,旧电脑运行如飞
  13. nvme 驱动详解[转]
  14. 苹果汽车已上路测试,预计将于明年推出
  15. 使用docker急速搭建Oracle测试环境(完全离线)
  16. 手机通讯录误删怎么恢复?教你解决这个问题
  17. dodo:人脸识别方法个人见解(zz from prfans)
  18. rand()随机函数
  19. ISA 2004 介绍
  20. SDI接口协议之ST 352

热门文章

  1. history.back(-1)和history.go(-1)的区别
  2. linux shell命令行选项与参数用法详解
  3. Redis的五大数据类型
  4. Linux命令行参数前加--,-和不加杠
  5. 斐波那契数列的鬼畜的性质
  6. Python正则替换字符串函数re.sub用法示例(1)
  7. (五十九)iOS网络基础之UIWebView简易浏览器实现
  8. ASP.NET 缓存技术分析
  9. height:auto 火狐没边框
  10. Windows 2008 R2服务管理器刷新失败