python神级网络与深度学习

一、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()计算范数。

猜你喜欢

转载自blog.csdn.net/hhhhhyyyyy8/article/details/80136299