- Python_Basic_with_Nympy
1 - 使用Numpy构建基本方程(常用numpy因为numpy中多用array表示vector,便于神经网络中的向量运算)
1.1- sigmoid function
import numpy as np # 之后在使用numpy中的方程事可以直接用 np.function()
def sigmoid(x)
s = 1. /(1 + np.exp(-x))
return s
1.2 - derivative of sigmoid fuction
def derivative_sigmoid(x)
s = 1. / ( 1 + np.exp( -x ) )
ds = s * ( 1 - s )
return ds
以上两个方程的输入x为np.array()类型
1.3 - Reshaping
- np.shape 计算n维np.array类型的数据的形状,返回值为一行n列
- np.reshape((k,l)) 将np.array类型的数据变成 k行l列
- np.size返回值是 各维乘积
举个栗子:
一个 3*2*3的image矩阵:
image = np.array([[[ 0.67826139, 0.29380381],
[ 0.90714982, 0.52835647],
[ 0.4215251 , 0.45017551]],
[[ 0.92814219, 0.96677647],
[ 0.85304703, 0.52351845],
[ 0.19981397, 0.27417313]],
[[ 0.60659855, 0.00533165],
[ 0.10820313, 0.49978937],
[ 0.34144279, 0.94630077]]])
image.size -- > 18 # 18 = 3*2*3
image.shape --> [3, 2, 3]
#image.shape[0]*image.shape[1]*image.shape[2] = image.size
image.reshape((image.size, 1)) -->会变成18行1列的vector
1.4 Normalizing by row
x_norm = np.linalg.norm(x, ord = 2, axis=1, keepdims = True)
axis = 0的时候计算每一列的norm
axis = 1的时候计算每一行的norm
1.5 Broadcasting and the softmax function
Broadcasting指的是在numpy中矩阵会做elementwise的乘除操作
softmax 就是 矩阵每一行各项的指数除以该行所有指数之和
def softmax(x):
x_exp = np.exp(x)
x_sum = np.sum(x_exp, axis = 1, keepdims = True)
s = x_exp/x_sum
return s
2 - 向量化运算
- np.dot() 两个向量内积(两个1*3的列向量相乘会得到一个数,也就是常说的两个向量的乘积)/ 向量和矩阵的相乘(线性代数中的矩阵乘积运算,(A*B)的矩阵和(B*C)的矩阵相乘会得到(A*C)的矩阵),需要符合size的行列保持前后一致。
- np.outer() 两个向量扩展乘积。(两个1*3的列向量做外积会得到一个(3*3)的矩阵)
- np.multiply() 两个向量的乘积,elementwise。(需要保持size相同,(A*B)的矩阵和(A*B)的矩阵相乘会得到(A*B)的矩阵),运算过程是两个矩阵每个对应项的乘积)
- L1 & L2 loss function
假设y是真正的输出,yhat是预测的输出
#L1 loss function
loss = np.sum(np.abs((y - yhat)))
#L2 loss function
loss = np.sum(np.square( y - yhat))
网友评论