cs231n:assignment1:KNN解答

      本篇博客是对斯坦福大学课程cs231n中第一个作业assignment1中对k-Nearest Neighbor部分的解答,解答过程使得对Python库numpy的应用更加熟悉,以及对train/val/test集有了更深的了解,对交叉验证法有了一定的掌握。下面直接进入正题:

      KNN算法基本思路:通过测试集与训练集的比较,作业中用的衡量标准是欧氏距离。比如,对于作业中的数据集,其中测试集(test)X是一个[500,3072]的矩阵,其中每一行都是一幅32*32*3大小的图片拉伸成的一个向量,共500张图片,训练集(train)X_train是一个大小为[5000,3072]的矩阵,同理有5000张图片。KNN所做的就是对X中的每一行与X_train中的5000行依次计算欧氏距离,并将距离保存在矩阵dists[500,5000],dists[i,j]即表示X[i,:]与X_train[j,:]的距离。若k=1,对于X中第i幅图,则选取所计算的5000个距离中的最小值,该最小值所对应的X_train中那幅图的类别就作为第i幅图的类别。若k=5,则选取距离最小的5个,其中对应的5张训练集的图片按照其出现次数最多的类别则作为第i幅图的类别。

1、也是在ipython notebook直接调试执行的,很方便,建议大家试一试。关于cifar-10的下载就不说了,打开ipython notebook之后再打开knn.ipynb。下面开始完成作业:首先将所下载的cifar-10数据集所在的路径添加到cifar10_dir中,比如我的:cifar10_dir = '/home/xxx/mydata/CS231n/assignment1/cs231n/datasets/cifar-10-batches-py'。

2、完成距离计算部分。

      打开s231n/classifiers/k_nearest_neighbor.py文件

     (1)compute_distances_two_loops()函数

              def compute_distances_two_loops(self, X):

                    num_test = X.shape[0]

                    num_train = self.X_train.shape[0]

                    dists = np.zeros((num_test, num_train))

                    for i in xrange(num_test):

                         for j in xrange(num_train):

                              dists[i,j] = np.sqrt(np.sum(np.square(self.X_train[j,:] - X[i,:])))   #欧式距离的计算,利用两个循环,将距离存入 

                              pass                                                                                           #dists中,该部分比较简单。

                    return dists

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值