神经网络基础知识(激活函数、网络实现)
神经网络基础知识(激活函数、网络实现)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pylab as plt
def showStepFunc():
"""
显示阶跃函数图形
"""
x = np.arange(-5.0, 5.0, 0.1)
y = np.array(x > 0, dtype=np.int)
plt.plot(x, y)
# 指定Y轴的范围
plt.ylim(-0.1, 1.1)
plt.show()
def showSigmoidFunc():
"""
显示sigmoid函数图形
"""
x = np.arange(-5.0, 5.0, 0.1)
y = simoid(x)
plt.plot(x, y)
# 指定Y轴的范围
plt.ylim(-0.1, 1.1)
plt.show()
def showReLUFunc():
"""
显示ReLU函数图形
"""
x = np.arange(-5.0, 5.0, 0.1)
y = np.maximum(0, x)
plt.plot(x, y)
# 指定Y轴的范围
plt.ylim(-0.1, 1.1)
plt.show()
def simoid(x):
"""
sigmoid函数实现
:param x: 输入值
:return:
"""
return 1 / (1 + np.exp(-x))
def softmax(x):
"""
softmax函数实现
:param x: 输入值
:param x:
"""
# 取最大信号值
c = np.max(x)
# 减去C是防止数据溢出,C为常数,可取任意值,不影响函数结果,一般取最大的输入信号值。
expX = np.exp(x - c)
sumExpX = np.sum(expX)
return expX / sumExpX
def initNetwork():
"""
三层神经网络参数定义
"""
network = {}
# 第一层信号权重
network['w1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
# 第一层偏置
network['b1'] = np.array([0.1, 0.2, 0.3])
# 第二层信号权重
network['w2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
# 第二层偏置
network['b2'] = np.array([0.1, 0.2])
# 第三层信号权重
network['w3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
# 第三层偏置
network['b3'] = np.array([0.1, 0.2])
return network
def idenityFunc(x):
"""
自定义的激活函数
:param x: 输入信号
:return:
"""
return x
def forward(network, x):
"""
神经网络的前向(输入到输出)处理
:param netword: 神经网络参数
:param x: 输入信号
"""
w1, w2, w3 = network['w1'], network['w2'], network['w3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x, w1) + b1
# 第一层激活函数计算
z1 = simoid(a1)
a2 = np.dot(z1, w2) + b2
# 第二层激活函数计算
z2 = simoid(a2)
a3 = np.dot(z2, w3) + b3
# 第三层激活函数计算
y = idenityFunc(a3)
return y
def doit():
network = initNetwork()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)
doit()
各层信号权重、偏置 怎么确定?
激活函数 是什么意思?
0.1 0.3 0.5 设为 0.11 0.31 0.51 有什么变化?
这是一个算法,慢慢研究
看不懂