目标
- Implement a neural network with fc layers for classifiction
- Test it on CIFAR-10 dataset
面向谷歌编程选手许若芃
在处理数据的时候,因为数据的大小差别会比较大,为了避免数据的特征被其他特征吃掉,需要对数据进行normalization的处理
找到最大值和最小值,以最大值为1,最小值为0,计算其他数据在0到1之间的分布。
1 | def normal0_1(x,Max,Min): |
使用np.max(),np.min来找最大值和最小值
输入原始数据的均值和标准差,对数据处理,处理之后的数据是标准正态分布(均值是0,标准差是1)
1 | def Normalization(x, mu, sigma): |
使用np.average()和np.std()找到均值和标准差
sigmoid函数关于(0, 0.5)中心对称,在中心附近斜率较大,在负无穷接近0,正无穷接近1
1 | def sigmood(x): |
这部分主要是softmax的loss要如何计算
Assignment From: Assignment1
参考文章:https://blog.csdn.net/u010976453/article/details/54381248
在求导的时候有,因为分子和分母可能的维度不太一样,所以两种不同的布局,分别是分子布局和分母布局
假设y(向量)对x(标量)求导:
即最简单的求导
比如一个列向量y,对x求导,结果是y里面的每个值都对x求导
矩阵里面的每个值都对x求导
y = [y1,y2 …. ym]
x = [x1,x2 …. xn]
最后求出来的结果是一个m行n列的矩阵,jacobian矩阵
矩阵y =
[[y11,y12…y1n],
[y21,y22 …y2n],
…
[yn1,yn2 …ynn]
]
向量x = [x1,x2…xn]T
最终的结果是每一行分别对这个x的向量求导,所以矩阵的列数和向量的行数应该先通
一般只考虑标量对矩阵(剩下的情况和上面类似)
最终结果是这个标量对所有的矩阵内容求导,求出来的是梯度矩阵
Assignment from: http: // cs231n.github.io / assignments2018 / assignment1/