cs231n Assignment1 笔记

Posted by Packy on April 9, 2018

入坑cs231n卷积神经网络入门,好多数学公式,赶快记起来。

标签(空格分隔): Python cs231n


智能单元笔记翻译 github参考1 github参考2

compute_distances_no_loops

主要是一个数学公式推导问题,也体现了numpy broadcast功能的强大~ 好好利用broadcast可以写出vectorized code。当我们对一个标量或者向量进行broadcast时,一定是指按元素(elementwise)操作,不像矩阵乘法那样的操作。

  1. 假设测试集矩阵$P$大小为$M \times D$, 训练集矩阵$C$ 大小为$N \times D$
  2. $记P_i是P的第i行,同理C_j是C的第j行$:
  1. 计算一下$P_i$到 $C_j$的距离:
  1. 结果矩阵的每行元素:
  1. 结果矩阵为:

python代码可以这样写:

M = np.dot(X, self.X_train.T)
te = np.square(X).sum(axis = 1) #水平延伸,对3072维数据进行平方后求和
tr = np.square(self.X_train).sum(axis = 1)
dists = np.sqrt(-2*M+tr+np.matrix(te).T)

其中最后一步公式转换成相同维度可以相加的过程,被broadcast特性给省略了。

矩阵大小为:

    ('X.type', <type 'numpy.ndarray'>)
    ('X.shape = ', (500L, 3072L))
    ('self.X_train.shape = ', (5000L, 3072L))
    ('M.shape = ', (500L, 5000L))
    ('te.shape = ', (500L,))
    ('tr.shape = ', (5000L,))
    ('dists.shape = ', (500L, 5000L))

Logs

  1. 2018-2-16 入坑,完成了knn算法的学习,了解了基本原理。
  2. 2018-2-26 完成了knn算法的实践。
  3. 2018-3-15 重新开始~~了解了一下broadcasting机制。