深度学习系列之cs231n assignment1 KNN(二)

写在前面:久经周折,终于能够将KNN系列给大家继续分享了,这次的内容来源于李飞飞教授团队的cs231n深度学习课程的作业1中的KNN研究,我会在全文我遇到困难的地方进行分享,以及一些想法。

内容安排

深度学习系列依托与cs231n的课程作业,因为只想练习编程,所以不对课程内容进行分享,仅针对编程内容进行分享。那么这一次的分享就是assignment1中K近邻分类器的使用,以及完成其中的四个问题,这四个问题我会在需要时讲解一下。在这里的编程中我们将主要使用的是numpy包的矩阵运算。
在本文中我们将分成1.任务了解、2.数据下载载入问题、3.模型训练细节说明与模型运行三个部分,那么我们首先来对任务进行一下说明。

1.任务了解

在cs231n的assignment1中关于KNN的任务,主要就是对已有的CIFAR10数据集进行预测计算,对于具体的CIFAR10数据集介绍和KNN算法课件cs231n课程以及相应机器学习内容。
在本次作业中我们会遇到这么几个问题,1.数据下载问题;2.数据载入问题;3.任务的完成,将这些问题解决后,还剩下交叉验证的问题,会在以后进行更新。

2.数据下载和载入问题

2.1数据下载
我们所需的数据如果是去官网上下载或许会太慢(真的慢),那么我们可以去
我的百度网盘下载我上传的数据
链接:https://pan.baidu.com/s/19iisthUMAOq07QOWCXf5gg
提取码:pops
这样我们就解决了第一个下载慢的问题,然后呢我们需要到cs231n课程的官网去下载课程作业cs231n课程官网,但好像下载需要翻墙,大家也可以去githubcs231n课程github上下载,如果大家都下载不下来,那就来我的百度网盘下载,
链接:https://pan.baidu.com/s/1ObBA4anAKUkTesYo-ydD7A
提取码:5e1p
好了这样我们就解决了数据下载和作业文档下载了。这个作业需要使用jupyter notebook的哈,然后我们需要编辑的是knn.ipynb和作业文件中cs231n\classifiers中的k_nearest_neighbor.py文件,这两个文件就是我们作业以及编程实现的地方。

2.2数据载入问题
数据载入这里很多朋友遇到了困难(也有可能就我遇到了困难哈哈哈),从我的小白水平出发,首先在打开knn.ipynb,在运行第一段代码时需要删除,

from __future__ import print_function

然后就是第一段代码,

#加载包
import random
import numpy as np
from cs231n.data_utils import load_CIFAR10 #这个是文件夹里带的
import matplotlib.pyplot as plt

#设置绘图参数
%matplotlib inline
plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
%load_ext autoreload
%autoreload 2

然后我们就要开始载入数据,下载好的数据解压后放在cs231n/datasets的目录下,当然也可以自行更改,这个地方由于我很小白导致很多地方都搞不懂,我这里遇到了主要问题是,虚拟环境内存太小程序无法运行,

cifar10_dir = 'cs231n/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)

其报错为,Memory Error然后里面没有任何内容,这种经过我仔细排查应该就是数据太大运行不了导致的,所以大家可以参考这一篇
数据量太大python运行不了怎么办
我使用的是其中的第三个方法,就手动扩展虚拟变量内存,按照步骤来后就解决了数据的读入,正确的输出是以下这样,

Training data shape:  (50000, 32, 32, 3)
Training labels shape:  (50000,)
Test data shape:  (10000, 32, 32, 3)
Test labels shape:  (10000,)

我们将数据分为训练数据以及测试数据两部分,训练数据有50000个32乘32像素的数据,测试集有10000个32乘32像素的数据,还有训练和测试两个标签值,对于CIFAR10数据集,里面有已经分好的10个类别,有什么飞机、汽车、猫等等。至此我们的数据就加载其中了,下面就开始对于完成任务的细节进行说明。

3.模型训练细节说明与模型运行

3.1数据查看和处理
下面我们开始运行文档中已有的程序,首先我们来查看已有数据

classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
num_classes = len(classes)
samples_per_class = 7
#enumerate 产生一个可迭代的序列,如0 plane,1 car
for y, cls in enumerate(classes):
    #flatnonzero返回扁平化后矩阵中非零元素的位置,此处表示y_train中等于y的位置,也就是每一类的索引
    idxs = np.flatnonzero(y_train == y) 
    #choice,表示从idxs中随机选取samples_per_class个不重复的样本,这里选取的就是从某一类中抽取7个图片的索引
    idxs = np.random.choice(idxs, samples_per_class, replace=False)
    for i, idx in enumerate(idxs):
        #plt_idx设置subplot的最后一位,因为是横向排列所以先乘以类别数到下一循环中
        plt_idx = i * num_classes + y + 1
        plt.subplot(samples_per_class, num_classes, plt_idx)
        #图片展示
        plt.imshow(X_train[idx].astype('uint8'))
        #关闭坐标轴
        plt.axis('off')
        if i == 0:
            #在一开始生成标签类别
            plt.title(cls)
plt.show()

在这里插入图片描述
下面对训练集和测试集进行处理,

# 缩减数据规模提高运行速度
num_training = 5000 #在做任务实验的时候建议改小数据到50的训练集,5的测试集减少运算时间
mask = list(range(num_training
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值