一、cPickle的使用
https://blog.csdn.net/u010602026/article/details/67650829
二、numpy知识
1.np.random.randn()
官方文档中给出的用法是:numpy.random.rand(d0,d1,…dn)
以给定的形状创建一个数组,数组元素来符合标准正态分布N(0,1)
np.random.randn(2,3) array([[ 0.82572082, -0.37452079, 0.42140572], [ 0.49958708, 0.05301762, -0.98729385]]
2.np.random.uniform()
函数原型: numpy.random.uniform(low,high,size)
功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
参数介绍:
low: 采样下界,float类型,默认值为0;
high: 采样上界,float类型,默认值为1;
size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出m*n*k个样本,缺省时输出1个值。
返回值:ndarray类型,其形状和参数size中描述一致。
np.random.uniform(1,10,10) array([ 5.98223858, 3.75359323, 8.16254175, 5.02214489, 3.88745842, 5.41275787, 3.00108589, 9.72229678, 9.9351597 , 2.14860539]) np.random.uniform(1,10,(2,3)) array([[ 4.64126495, 4.98038204, 9.67375089], [ 8.24679846, 7.89941491, 8.60696148]])
3.向量与数组的乘法
- 当为array时,a*b是对应的元素相乘;np.multiply(a,b)是对应的元素相乘;np.dot(a,b)是矩阵相乘
- 当为matrix时,a*b是矩阵相乘;np.multiply(a,b)是对应的元素相乘;np.dot(a,b)是矩阵相乘
注:matrix的维数只能是二维的。
总之无论是array还是matrix,multiply用来计算对应元素乘法,dot用来计算矩阵乘法。
#array a = np.array([[1,2],[3,4]]) a array([[1, 2], [3, 4]]) b = a a*b array([[ 1, 4], [ 9, 16]]) np.multiply(a,b) array([[ 1, 4], [ 9, 16]]) np.dot(a,b) array([[ 7, 10], [15, 22]])
#matrix c = np.matrix([[1,2],[3,4]]) c matrix([[1, 2], [3, 4]]) d = c c*d matrix([[ 7, 10], [15, 22]]) np.multiply(c,d) matrix([[ 1, 4], [ 9, 16]]) np.dot(c,d) matrix([[ 7, 10], [15, 22]])
4.Python中广播
a = np.array([1,2,3]) b = np.array([[1],[2],[3]]) a*b array([[1, 2, 3], [2, 4, 6], [3, 6, 9]] b+a array([[2, 3, 4],
[3, 4, 5], [4, 5, 6]])
反正一个按照行扩充,一个按照列扩充。
三、深度学习中的超参数
学习率,迭代次数,小批量尺寸,神经网络层数,每层的神经元个数等
四、对BP神经网络中学习率太小的理解
如果BP网络中层数较多,整个10层,8层的,那个一个权值的变化,对最终误差的影响基本忽略,误差对于权重的偏导即梯度太小了。
五、np.linalg.norm函数
1、linalg=linear(线性)+algebra(代数),norm则表示范数。
np.linalg.norm()计算范数。