斯坦福深度学习课程CS231n Assignment 1

1,936 阅读3分钟

边写边更新博客中😄近期会一直更新,可以先收藏

作业官方链接

配套课程B站录播 2017旧版 2020新版

1. setup

上面的官方链接给了两个实验方式,第一个是用谷歌的云服务器,第二个是本地跑,我选的第二个。下载一个包括 jupyter notebook 和 starter code 的文件夹,然后执行pip命令下载一些用到的包。此步骤有报错的话看提示吧,可能包的依赖之间有冲突之类的。

pip install -r requirements.txt

接下来执行下载数据集的脚本,数据集不大,100多M。

cd cs231n/datasets
./get_datasets.sh

运行 jupyter notebook。

jupyter notebook

选择相应的指导书即可。

2. KNN (20 points)

直接在 jupyter notebook 里跑就行了

先设置 notebook ,这段代码可以实现直接在文本中插入生成的图片,十分的方便。

这引入数据集,并且考虑到了多次运行的情况,会自动 clean 之前的数据,最后打印了一下数据的 shape ,training data 有50,000 条,test data 有10,000 条,"32, 32, 3" 是 32 * 32 个像素 * 每个像素的 RGB 值(3)。labels 是一维数组,指向一个种类,猪、狗、牛、羊等。

对数据集进行简单的可视化。

将数据集缩小范围,几万张图跑在笔记本上还是比较吃力的

k_nearest_neighbor.py 代码补全

KNN的“训练”只是单纯的保存 training set。

compute_distances_two_loops()方法需要补全,输入是 test set,输出是一个二位数组,dists[i][j] 代表 test set[i] 与 training set[j] 之间的欧式距离。

实例化一个KNearestNeighbor,训练并打印 dists 的shape测试上面补全的函数。打印出的500 * 5000 是对的

对这个数组进行可视化,看不清,在本地跑吧。

是一个500*5000的数组,下面说了,欧式距离越大的点颜色越浅(亮)。

继续放大。

可以看到可视化之后就是一堆明暗分明的点,还能依稀看到很多明亮的线。这里提了问题:

Inline Question 1

Notice the structured patterns in the distance matrix, where some rows or columns are visible brighter. (Note that with the default color scheme black indicates low distances while white indicates high distances.)

  • What in the data is the cause behind the distinctly bright rows?
  • What causes the columns?

1. 横向的明亮的线说明那个 test data 和所有 train data 的欧式距离都很大,也就是和所有 train data 都不像。

2.纵向的明亮的线说明那个training data 和所有 test data 的欧式距离都很大,和所有test data 都不像。

一开始没在 jupyter notebook 上跑代码,在本地跑的,遇到下面俩坑点,可以参考。如果是在 jupyter 上跑,貌似没问题。

坑点1:

python knn.py
Traceback (most recent call last):
  File "knn.py", line 5, in <module>
    from cs231n.data_utils import load_CIFAR10
  File "/Users/cherish/Documents/assignment1/cs231n/data_utils.py", line 7, in <module>
    from imageio import imread
ImportError: No module named imageio

解决:本地环境同时有 python2.7 和 python3.7 ,前者对应 python ,后者对应 python3 。改为

python3 knn.py

问题解决。

坑点2:

~/Documents/assignment1 » python3 knn.py                       
Training data shape:  (50000, 32, 32, 3)
Training labels shape:  (50000,)
Test data shape:  (10000, 32, 32, 3)
Test labels shape:  (10000,)
[1]    49571 segmentation fault  python3 knn.py

后面就突然semgent fault了,排查了一下问题出现在 plt.show() 这一句。解决方案就是加两行

import matplotlib as mpl        # 这两行在前
mpl.use('TkAgg')                # 这两行在前
import matplotlib.pyplot as plt # 这一行在后