CS231n_1_assignment1_KNN做题笔记

这篇笔记详细记录了KNN算法在CS231n课程中的应用,包括向量平方和计算、CPU运算效率、寻找最近邻、加速距离计算以及交叉验证的实践。探讨了如何优化计算过程,如利用numpy广播机制和避免内存错误,强调了数学推导和代码能力的重要性。
摘要由CSDN通过智能技术生成

笔记

KNN部分

1.python中一个向量,每个元素平方后求和:

方法1

sum = 0
for item in vector:
	sum += item*item

方法2

summ = numpy.sum(vector**2)  # 不知可否?

2.CPU运算速度和运算量问题

只使用像素数据,求一张图片和另外5000张图片之间的L2 Distance,利用两层for循环实现。Intel® Core™ i7-4790 CPU @ 3.60GHz × 8 的配置,计算了几分钟了还没输出结果。。
怀疑是否在运算,那查看一下CPU使用率,linux系统咋看?在终端使用top命令

mortimerli@mortimerli-All-Series:~$ top

发现有一个cpu使用率100%,放心了,在运算,等着就行了。计算了大概10分钟终于输出结果了。。

3.KNN如何找到最近的m个样例(predict_labels)

  1. 首先,对于test数据集中的一张图,得找到它和training数据集中5000张图片最小的欧式距离,并返回下标:

    根据提示,查了一下numpy.argsort()

    indexes = np.argsort(dists[i,:])
    # 使用默认参数时,对一个向量的所有元素从小到大进行排序,按顺序返回下标
    
  2. 找到下标之后,要找到这些下标对应什么label,并找到最多的那个label,把它当作给这张test图片预测的标签:
    最直接的想法是,记录每一个label记录出现的次数,求最大值(感觉会有更好的方法?)

      def predict_labels(self, dists, num_classes ,  k=1):
        num_test = dists.shape[0]
        y_pred = np.zeros(num_test)
        
        for i in xrange(num_test):  # 行循环
          closest_samples_for_one_test_sample = np.argsort(dists[i,:])  # 对一个向量的所有元素从小到大进行排序,按顺序返回下标
          for j in range(k):
                closest_k_indexes = closest_samples_for_one_test_sample[0:k]
                closest_y = self.y_train[closest_k_indexes]  # 标签,是一堆数
    
          count = np.zeros(num_classes)
          for item in closest_y:
                for mm in range(num_classes):
                    count[mm] += ((item == mm)+0)
                    
          index_of_maxcount 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值