看鱼书有感,记录一下:
- 批处理的好处及小批量概念(2)
- Python(Numpy)实现均方差、交叉熵损失函数等(3)
- 纯Python实现:函数求导切线图、求偏导、梯度下降法(4)
- 纯Python实现反向传播(BP算法)(5)
- BN的好处、正则化(6)
- 卷积神经网络的输入输出尺寸问题(7)
1.阶跃函数
import numpy as np
import matplotlib.pyplot as plt
def step_fun(x):
#先把array转为int
return np.array(x>0,dtype=np.int)
x=np.arange(-5.0,5.0,0.1)
y=step_fun(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#设置y轴范围
plt.show()
2.Sigmoid函数(少用,会发生梯度消失)
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1/(1+np.exp(-x))
x=np.arange(-5.0,5.0,0.1)
y=sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#设置y轴范围
plt.show()
向这个转换器输入某个值后,输出值是输入值的常数倍的函数称为线性函数(用数学
式表示为h(x) = cx。c为常数)。因此,线性函数是一条笔直的直线。而非线性函数,顾名思义,指的是不像线性函数那样呈现出一条直线的函数。
3.Tanh函数
import numpy as np
import matplotlib.pyplot as plt
def tanh(x):
return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
x=np.arange(-5.0,5.0,0.1)
y=tanh(x)
plt.plot(x,y)
plt.show()
4.Relu函数
import numpy as np
import matplotlib.pyplot as plt
def relu(x):
return np.maximum(0,x)
x=np.arange(-5.0,5.0,0.1)
y=relu(x)
plt.plot(x,y)
plt.show()
数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。本书基本上将二维数组称为“矩阵”,将三维数组及三维以上的数组称为“张量”或“多维数组”。
5.Leaky relu
在relu的负轴*0.01而已
import numpy as np
import matplotlib.pyplot as plt
def Leaky_relu(x):
return np.maximum(0.01*x,x)
x=np.arange(-5.0,5.0,0.1)
y=Leaky_relu(x)
plt.plot(x,y)
plt.show()
6.矩阵乘法
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
print(np.dot(a,b))
输出: [[19 22]
[43 50]]
3行两列的矩阵eg: np.array([[1,2], [3,4], [5,6]]),并不是三维矩阵
7.三层神经网络的实现(输入+隐藏层*2+输出层)
import numpy as np
def sigmoid(x):
return 1/(1+np.exp(-x))
x=np.array([1.0,0.5])
w1=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
b1=np.array([0.1,0.2,0.3])
a1=np.dot(x,w1)+b1
z1=sigmoid(a1)
w2=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
b2=np.array([0.1,0.2])
a2=np.dot(z1,w2)+b2
z2=sigmoid(a2)
w3=np.array([[0.1,0.3],[0.2,0.4]])
b3=np.array([0.1,0.2])
a3=np.dot(z2,w3)+b3
print(a3)
输出: [0.31682708 0.69627909]
8.Softmax函数
import numpy as np
def softmax(a):
exp_a=np.exp(a)
sum_exp_a=np.sum(exp_a)
y=exp_a/sum_exp_a
return y
a=np.array([0.3,2.9,4.0])
print(softmax(a))
加入常数c防止溢出:
import numpy as np
def softmax(a):
c=np.max(a)
exp_a=np.exp(a-c)
sum_exp_a=np.sum(exp_a)
y=exp_a/sum_exp_a
return y
a=np.array([0.3,2.9,4.0])
y=softmax(a)
print(y)
print(np.sum(y))
softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。