Python基础与Numpy

对比普通实现方法与使用Numpy科学计算模块实现的差别,体现使用Numpy的优势在哪里。



1、Sigmoid函数,np.exp()

np.exp():e的多少次幂,即 ex e x

我们分别使用 math.exp()、np.exp() 来实现 sigmoid中的指数函数的构建。

![](http://p9huev7ij.bkt.clouddn.com/18-7-22/92320173.jpg) Sigmoid函数公式为:
Sigmoid=11+ex S i g m o i d = 1 1 + e − x
首先使用普通的数学方式来实现:
import math

def basic_sigmoid(x):
    '''
    计算输入为 x 的sigmoid函数
    Arguments: x: 实数
    Return:s--sigmoid(x)
    '''
    s = 1 / (1 + math.exp(-x))
    return s

但是事实上,深度学习中很少用 ’math‘ 模块,因为它的输入必须是一个实数,而在深度学习中,输入经常为矩阵或是向量。

import numpy as np

x = np.array([1,2,3])
print(np.exp(x))

>> [ 2.71828183  7.3890561  20.08553692]

结果是将输入矩阵的每个元素都对应的做了 ex e x 运算。

x = np.array([1,2,3])
print(x+3)

输出结果为矩阵的每一个元素都做相同的运算。

注:
这里输入的作为运算的矩阵必须是 np.array([ , , ]) 生成的, nimpy array,否则无法执行这些运算。

我们可以构建一个输入为矩阵的 Sigmoid S i g m o i d 函数:

sigmoid(x)=sigmoidx1x2x3=11+ex111+ex211+ex3For xRn s i g m o i d ( x ) = s i g m o i d ( x 1 x 2 x 3 ) = ( 1 1 + e − x 1 1 1 + e − x 2 1 1 + e − x 3 ) , F o r   x ∈ R n

import numpy as np

def sigmoid(x):
    s = 1 / (1 + np.exp(-x))
    return s

x = np.array([1,2,3])
sigmoid(x)


>>  [0.73105858 0.88079708 0.95257413]

对每一个输入矩阵的元素做了 11+ex 1 1 + e − x 运算,然后返回了同样形状的矩阵。

2、Sigmoid 梯度

我们需要使用反向传播来计算优化损失函数的梯度,梯度也就是导数。

首先我们对 Sigmiod S i g m i o d 函数求导:

Sigmoid=11+ex1(1+ex)2 S i g m o i d ′ = 1 1 + e − x − 1 ( 1 + e − x ) 2

Sigmoid S i g m o i d 函数表示为 σ(x) σ ( x ) 即梯度函数可以写为:

sigmoid_derivative(x)=σ(x)=σ(x)(1σ(x)) s i g m o i d _ d e r i v a t i v e ( x ) = σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) )

简化即计算:

σ(x)=s(1s) σ ′ ( x ) = s ( 1 − s )

def sigmoid_derivative(x):
    s = sigmoid(x)
    ds = s * (1 - s)
    return ds


x = np.array([1,2,3])
print('Sigmoid_derivative')


>> [0.19661193 0.10499359 0.04517666]

同样是对每个元素应用了 Sigmoid 求导公式。

3、重塑矩阵(Reshaping arrays)

X.shape():可以得到矩阵 / 向量 X 的形状
X.reshape():用于将 X 改变成其他的形状

例如,在科学计算的时候,输入一张图片是一个3D形状的矩阵 length,height,depth=3 ( l e n g t h , h e i g h t , d e p t h = 3 ) ,然而,当把这张图片作为一个算法的输入的时候,要将它转换为一个向量的形状

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值