入坑cs231n卷积神经网络入门,好多数学公式,赶快记起来。
标签(空格分隔): Python cs231n
compute_distances_no_loops
主要是一个数学公式推导问题,也体现了numpy broadcast功能的强大~ 好好利用broadcast可以写出vectorized code。当我们对一个标量或者向量进行broadcast时,一定是指按元素(elementwise)操作,不像矩阵乘法那样的操作。
- 假设测试集矩阵$P$大小为$M \times D$, 训练集矩阵$C$ 大小为$N \times D$
- $记P_i是P的第i行,同理C_j是C的第j行$:
- 计算一下$P_i$到 $C_j$的距离:
- 结果矩阵的每行元素:
- 结果矩阵为:
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
- 2018-2-16 入坑,完成了knn算法的学习,了解了基本原理。
- 2018-2-26 完成了knn算法的实践。
- 2018-3-15 重新开始~~了解了一下broadcasting机制。