☁️主页 Nowl
专栏《机器学习实战》 《机器学习》
君子坐而论道,少年起而行之
文章目录
感知机模型介绍
神经网络搭建感知机
结构
准备训练数据
感知机的损失函数与优化方法
测试结果
完整代码
多层感知机
结语
感知机是一种很简单的二分类模型,给它一组特征,它输出是或者否
在这一节中,我们使用Keras来搭建神经网络,Keras是一个python的深度学习框架
本节我们创建一个简单的判断输入是正数还是负数的感知机模型
在神经网络中,感知机就是一个只有一个输入层,一个输出层的神经网络,我们使用Keras库来定义它
from keras.models import Sequential
from keras.layers import Dense
model = Sequential([
Dense(1, activation='sigmoid')
])
可以看到非常简单
因为任务非常简单,所以我们只用一小部分数据进行训练
# 创建随机输入数据和目标数据
input_data = np.array([[1], [-5], [-3], [2], [7], [-2], [5], [-2], [-111], [234], [21], [-24]])
target_data = np.array([[1], [0], [0], [1], [1], [0], [1], [0], [0], [1], [1], [0]])
将输入数据转化为array,这是Keras支持的输入格式,不然可能会报错
我们定义损失函数为mse,优化方法为随机梯度下降,并训练模型1000个轮次
# 编译模型
model.compile(loss='mse', optimizer='sgd')
# 训练模型
model.fit(input_data, target_data, epochs=1000)
data = np.array([[1], [98], [-17]])
prediction = model(data)
for i in range(3):
print(str(data[i][0])+"是", end="")
if prediction.numpy()[i][0] > 0.5:
print("正数")
else:
print("负数")
在这个代码中,我们输入三个数据,1,98和-17,之后是对输出结果进行处理:如果模型输出的数据大于0.5,那就判断为正数,否则判断为负数,我们看看运行结果
我们再来回顾完整代码,这个代码用一个感知机模型完成了判断数字正负的任务
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
# 定义模型
model = Sequential([
Dense(1, activation='sigmoid')
])
# 创建随机输入数据和目标数据
input_data = np.array([[1], [-5], [-3], [2], [7], [-2], [5], [-2], [-111], [234], [21], [-24]])
target_data = np.array([[1], [0], [0], [1], [1], [0], [1], [0], [0], [1], [1], [0]])
# 编译模型
model.compile(loss='mse', optimizer='sgd')
# 训练模型
model.fit(input_data, target_data, epochs=1000)
# 效果检测
data = np.array([[1], [98], [-17]])
prediction = model(data)
for i in range(3):
print(str(data[i][0])+"是", end="")
if prediction.numpy()[i][0] > 0.5:
print("正数")
else:
print("负数")
多层感知机是在感知机的基础上多了一个或多个隐藏层,同时加入了一些激活函数,隐藏层与激活函数使得多层感知机能够处理更加复杂的问题,非线性分类,多分类等
以我的理解,单层感知机和多层感知机都只是形式化了的模型的某种结构,在具体任务中,我们的模型架构将是灵活多变的,我们主要应该了解的是模型的某一部分的作用,以便我们在遇到问题时能搭建出对应的模型,跟着本专栏继续学习下去吧
感谢阅读,觉得有用的话就订阅下本专栏吧,有错误也欢迎指出