1.感知机
多个输入,一个输出。缺点就是形成异或门的局限性。没什么太多好说的,原理也很简单,直接上代码了。
1.1与门的代码
import numpy as np
def AND(x1, x2): #定义与门的函数和两个参数
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
1.2或门的代码
import numpy as np
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
1.3与非门的代码
import numpy as np
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
b = 0.7
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
1.4异或门的代码,前面几种门结合一下就可以了。
from and_gate import AND
from or_gate import OR
from nand_gate import NAND
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
2.激活函数总结,激活函数其实就是一种判断的方式,以阈值为边界。
2.1 阶跃函数
def step_function(x):
if x > 0:
return 1
else
return 0
输入数据只接受实数即浮点数的类型,即只接受step_function(3.0)的类型,而不接受step_function([1.0, 2.0]),作出如下修改:
def step_function(x):
y = x > 0
return y.astype(np.int) #这个很重要,将其转换成int整实数类型
3. 三层神经网络的实现
def init_network(): #定义了这个函数,可以用来进行权重和偏置的初始化
network = {} #并将下面的参数保存在字典变量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 forward(network, x): #forward()函数,表示的是从输入到输出方向的传递处理。
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 = sigmoid(a1) #sigmoid()这个激活函数用来接收numpy数组并且返回元素个数相同的numpy数组
a2 = np.dot(z1, W2) + b2
z2 = sigmoid(a2)
a3 = np.dot(z2, W3) + b3
y = identity_function(a3) #identity_function()称为恒等函数,将其作为输出层的激活函数
return y
#调用函数
network = init_network()
x = np.array([1, 0.5])
y = forward(network, x) #forward()函数,表示的是从输入到输出方向的传递处理。输出权重的初始值和x。
print(y)
4. softmax函数
一般来说,回归问题用恒等函数,二分类问题用sigmoid函数,多分类问题用softmax函数。
import numpy as np
#softmax代码实现
a = np.array([0.3, 2.9, 4.0])
exp_a = np.exp(a) #指数函数
print(exp_a)
#结果[ 1.34985881 18.17414537 54.59815003]
sum_exp_a = np.sum(exp_a) #求他们的和
print(sum_exp_a)
#结果 74.1221542101633
y = exp_a/sum_exp_a
print(y)
#结果[0.01821127 0.24519181 0.73659691]
#整合成一个函数如下
def softmax(a):
exp_a = np.exp(a) #指数函数
sum_exp_a = np.sum(exp_a) #求他们的和
y = exp_a/sum_exp_a
return y
5.python画图的函数Matplotlib
#Matplotlib是用于绘制图形的库!!以及数据可视化
#用matplotlib的pyplot模块绘制图形
import numpy as np
import matplotlib.pyplot as plt
#生成数据
x = np.array(0, 6, 0.1)
y = np.sin(x)
#绘制图形
plt.plot(x, y) #将xy的数据传给plt.plot
plt.show() #通过这个来显示图形
#pyplot的功能如下所示:
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制图形
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle = "--", label="cos")
plt.xlabel("x") # x轴的标签
plt.ylabel("y") # y轴的标签
plt.title('sin & cos')
plt.legend()
plt.show()