python里的numpy操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33200967/article/details/79759284

目录

常用的激活函数

我们常用的激活函数有sigmoid,tanh,ReLU这三个函数,我们都来学习学习吧。

sigmoid函数

在深度学习中,我们经常会使用到sigmoid函数作为我们的激活函数,特别是在二分类上,sigmoid函数是比较好的一个选择,以下就是sigmoid函数的公式:

sigmoid(x)=11+ex(1)(1)sigmoid(x)=11+e−x

sigmoid函数的坐标图是:
sigmoid函数
sigmoid函数的代码实现:

import numpy as np

def sigmoid(x):
    s = 1 / (1 + np.exp(-x))
    return s
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

因为是使用numpy实现的sigmoid函数的,所以这个sigmoid函数可以计算实数、矢量和矩阵,如下面的就是当x是实数的时候:

if __name__ == '__main__':
    x = 3
    s = sigmoid(x)
    print s
 
 
  • 1
  • 2
  • 3
  • 4

然后会输出:

0.952574126822
 
 
  • 1

当x是矢量或者矩阵是,计算公式如下:

sigmoid(x)=sigmoid⎛⎝⎜⎜⎜x1x2...xn⎞⎠⎟⎟⎟=⎛⎝⎜⎜⎜⎜⎜11+ex111+ex2...11+exn⎞⎠⎟⎟⎟⎟⎟(2)(2)sigmoid(x)=sigmoid(x1x2...xn)=(11+e−x111+e−x2...11+e−xn)

使用sigmoid函数如下:

if __name__ == '__main__':
    x = np.array([2, 3, 4])
    s = sigmoid(x)
    print s
 
 
  • 1
  • 2
  • 3
  • 4

输出的结果是:

[0.88079708 0.95257413 0.98201379]
 
 
  • 1

sigmoid函数的梯度

为什么要计算sigmoid函数的梯度,比如当我们在使用反向传播来计算梯度,以优化损失函数。当使用的激活函数是sigmoid函数就要计算sigmoid函数的梯度了。计算公式如下:

sigmoid_derivative(x)=σ(x)=σ(x)(1σ(x))(3)(3)sigmoid_derivative(x)=σ′(x)=σ(x)(1−σ(x))

Python你代码实现:

import numpy as np

def sigmoid_derivative(x):
    s = 1 / (1 + np.exp(-x))
    ds = s * (1 - s)
    return ds
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

当x是实数时,计算如下:

if __name__ == '__main__':
    x = 3
    s = sigmoid_derivative(x)
    print s
 
 
  • 1
  • 2
  • 3
  • 4

输出结果如下:

0.0451766597309
 
 
  • 1

当x是矩阵或者矢量时,计算如下:

if __name__ == '__main__':
    x = np.array([2, 3, 4])
    s = sigmoid_derivative(x)
    print s
 
 
  • 1
  • 2
  • 3
  • 4

输出结果如下:

[0.10499359 0.04517666 0.01766271]
 
 
  • 1

tanh函数

tanh也是一个常用的激活函数,它的公式如下:

tanh(x)=exexex+ex(4)(4)tanh(x)=ex−e−xex+e−x

tanh的坐标图是:
这里写图片描述
tanh的代码实现:

import numpy as np

def tanh(x):
    s1 = np.exp(x) - np.exp(-x)
    s2 = np.exp(x) + np.exp(-x)
    s = s1 / s2
    return s
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

为了方便,这里把x是实数、矢量或矩阵的情况一起计算了,调用方法如下:

if __name__ == '__main__':
    x = 3
    s = tanh(x)
    print s
    x = np.array([2, 3, 4])
    s = tanh(x)
    print s
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

以下就是输出结果:

0.995054753687
[0.96402758 0.99505475 0.9993293 ]
 
 
  • 1
  • 2

tanh函数的梯度

同样在这里我们也要计算tanh函数的梯度,计算公式如下:

tanh_derivative(x)=tanh(x)=1tanh2x=1(exexex+ex)2(5)(5)tanh_derivative(x)=tanh′(x)=1−tanh2⁡x=1−(ex−e−xex+e−x)2

Python代码实现如下:

import numpy as np

def tanh_derivative(x):
    s1 = np.exp(x) - np.exp(-x)
    s2 = np.exp(x) + np.exp(-x)
    tanh = s1 / s2
    s = 1 - tanh * tanh
    return s
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

调用方法如下:

if __name__ == '__main__':
    x = 3
    s = tanh_derivative(x)
    print s
    x = np.array([2, 3, 4])
    s = tanh_derivative(x)
    print s
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出结果如下:

0.00986603716544
[0.07065082 0.00986604 0.00134095]
 
 
  • 1
  • 2

ReLU函数

ReLU是目前深度学习最常用的一个激活函数,数学公式如下:

relu(x)=max(0,x)={x0ifx>0ifx0(6)(6)relu(x)=max(0,x)={x,ifx>00,ifx≤0

其对应的坐标图为:
这里写图片描述
Python代码的实现:

import numpy as np

def relu(x):
    s = np.where(x < 0, 0, x)
    return s
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

调用方式如下:

if __name__ == '__main__':
    x = -1
    s = relu(x)
    print s
    x = np.array([2, -3, 1])
    s = relu(x)
    print s
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出结果如下:

0
[2 0 1]
 
 
  • 1
  • 2

图像转矢量

为了提高训练是的计算速度,一般会把图像转成矢量,一张三通道的图像的格式是(width,height,3)(width,height,3),我们使用Python代码尝试一下:

import numpy as np

def image2vector(image):
    v = image.reshape((image.shape[0] * image.shape[1] * image.shape[2], 1))
    return v
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

调用方法如下:

if __name__ == '__main__':
    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]]])
    vector = image2vector(image)
    print "image shape is :", image.shape
    print "vector shape is :", vector.shape
    print "vector is :" + str(image2vector(image))
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

输出结果如下:

image shape is : (3, 3, 2)
vector shape is : (18, 1)
vector is :[[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]]
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

规范化行

在深度学习中通过规范化行,可以使模型收敛得更快。它的计算公式如下:

x=[023644](7)(7)x=[034264]

Python代码实现:

import numpy as np

def normalizeRows(x):
    x_norm = np.linalg.norm(x, axis=1, keepdims=True)
    print "x_norm = ", x_norm
    x = x / x_norm
    return x
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

调用该函数:

if __name__ == '__main__':
    x = np.array([
        [0, 3, 4],
        [1, 6, 4]])
    print "normalizeRows(x) = " + str(normalizeRows(x))
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

输出结果如下:

x_norm =  [[5.        ]
 [7.28010989]]
normalizeRows(x) = [[0.         0.6        0.8       ]
 [0.13736056 0.82416338 0.54944226]]
 
 
  • 1
  • 2
  • 3
  • 4

广播和softmax函数

广播是将较小的矩阵“广播”到较大矩阵相同的形状尺度上,使它们对等以可以进行数学计算。注意的是较小的矩阵要是较大矩阵的倍数,否则无法使用广播。
以下就是softmax函数,这函数在计算的过程就使用到了广播的性质。softmax函数的公式如下:

xR1×nsoftmax(x)=softmax([x1x2...xn])=[ex1jexjex2jexj...exnjexj](10)(10)x∈R1×n, softmax(x)=softmax([x1x2...xn])=[ex1∑jexjex2∑jexj...exn∑jexj]

xRm×nxijsoftmax(x)=softmax⎡⎣⎢⎢⎢⎢⎢x11x21xm1x12x22xm2x13x23xm3x1nx2nxmn⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢ex11jex1jex21jex2jexm1jexmjex12jex1jex22jex2jex
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值