常用的numpy方法请详见:https://blog.csdn.net/flyDeDog/article/details/63255431?locationNum=9&fps=1
#创建一个向量
x = np.array([1, 2, 3])
#sigmoid 函数的实现
sigmoid = 1/(1+np.exp(-x))
np.exp(-x)是对输入向量 element-wise的方法
#sigmoid的导数
ds = s(1-s)
#当我们输入一个大型矩阵时,我们需要将这个矩阵unroll成一个超长的向量,这样可以避免出现各种BUG
x.shape是np.array的一个属性。为一个记录了行*列*深度的列表
x.reshape()方法可以改变矩阵的维度,例如将输入的图片 (length,height,depth=3) 转换成(length*height*depth=3,1)的向量。
x = x.reshape((x.shape[0]*x.shape[1]*x.shape[2],1))
#对输入数据进行归一化
输入的矩阵为(行向量作为样品):x=[[0 3 4],[3 5 6]]
利用 x_norm = np.linalg.norm(x, axis = 1, keepdims = True)
可得 x_norm = [5,5*根5]
将x=x/x_norm 即可归一化, x_norm是2*1的矩阵,x是2*3的矩阵。python中的广播则会将x_norm中的各行对应处理x中的各个行。
#建立一个softmax函数
x --一个n*m矩阵
1.利用np.exp()将x指数化
x = np.exp(x)
2.计算每一行的和
x_sum = np.sum(x,axis =1 ,keepdim =True)
3.利用广播求出softmax函数
softmax = x/x_sum
将三维矩阵想象成一个立方体
b.sum(axis=0) 就是将所有的行叠加,仿佛一个立方体的上表面不断往下叠加。
b.sum(axis=1) 将所有的列叠加,一个立方体的左表面不断往右叠加。
b.sum(axis =2 ) 将所有的深度进行叠加,一个立方体的前表面不断往后叠加。
#L1 loss函数
yhat表示预测值的行向量
y表示实际的标签行向量
sum求和的时候可以利用矩阵乘法np.dot()与累加np.sum()
loss = float(np.sum(abs(y-yhat),axis = 0,keepdims = True))#利用求和将y-yhat行向量进行行叠加成一个数,记得绝对值
loss = np.dot(abs(y-yhat),np.ones(y.shape[0]).T)#利用矩阵乘法1*n * n*1 求和
#L2 loss函数
loss = np.dot((y - yhat),(y - yhat).T) #直接利用矩阵乘法即可