最近在听斯坦福cs231n assignment1的课程,完成了assignment1的第一个作业knn.iqynb,下面把过程记录下来:

import random
import numpy as np
from data_utils import load_CIFAR10
import matplotlib.pyplot as plt

# This is a bit of magic to make matplotlib figures appear inline in the notebook
# rather than in a new window.
%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'

# Some more magic so that the notebook will reload external python modules;
# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython
%load_ext autoreload
%autoreload 2

首先是加载下好的包

【cs231n assignment1】knn.ipynb

跟着代码显示图片:

【cs231n assignment1】knn.ipynb

【cs231n assignment1】knn.ipynb

把数据存储到矩阵中:

【cs231n assignment1】knn.ipynb

注意其中的3072是32*32*3得来,np.reshape(x_test,(X_test.shape[0],-1)里,-1表示,变换行列数后的矩阵的列数等于原有元素个数除以新给定的行数。

接下来用到的函数就要我们自己写了:

【cs231n assignment1】knn.ipynb

首先要完成两个循环版本的矩阵距离的范数:

【cs231n assignment1】knn.ipynb

写好后运行:【cs231n assignment1】knn.ipynb我们可以看到保存范数的矩阵的shape,然后可视化距离:

【cs231n assignment1】knn.ipynb

接下来是写Predict函数,不同K值的结果如图:

【cs231n assignment1】knn.ipynb

函数:

【cs231n assignment1】knn.ipynb

接下来分别用一次循环和零次循环求距离:

【cs231n assignment1】knn.ipynb

一次循环求距离利用矩阵一行与整体矩阵加法规则:【cs231n assignment1】knn.ipynb

该行与矩阵每一行作加法。

零次循环:

【cs231n assignment1】knn.ipynb

这种办法比较难想到 主要是用公司(A-B)^2=A^2+B^2-2A*B

然后是比较循环的时间和准确度,显示是零次循环最快:

【cs231n assignment1】knn.ipynb

【cs231n assignment1】knn.ipynb

然后是交叉检验:我用的代码比较啰嗦

【cs231n assignment1】knn.ipynb

然后画出不同K值的准确度的图:

【cs231n assignment1】knn.ipynb

取K等于10的时候最高,准确率为:

【cs231n assignment1】knn.ipynb

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-09
  • 2021-06-19
  • 2022-01-08
  • 2022-02-28
  • 2022-01-06
猜你喜欢
  • 2022-12-23
  • 2021-05-24
  • 2021-09-07
  • 2021-04-16
  • 2022-12-23
  • 2021-08-30
  • 2021-12-13
相关资源
相似解决方案