文章目录
一、多层感知器MLP原理介绍
单层神经元的缺陷:神经元要求数据必须是线性可分的。异或问题无法找到一条直线分割两个类
为了继续使用神经网络解决这种不具备线性可分性的问题,采取在神经网络的输入端和输出端之间插入更多的神经元
多层感知器(MLP,Multilayer Perceptron)是一种前馈人工神经网络模型,其将输入的多个数据集映射到单一的输出的数据集上。
它包含输入层,至少一层隐藏层和一层输出层,如下图所示:
可见层与层之间是全连接的,每一条连线代表一个权重w参数。此神经⽹络输⼊层包含三个输⼊单元,隐藏层包含3个神经元,输出层包含⼀个神经元。计算层只包含隐藏层和输出层。
隐藏层表示为:
输出层表示为:
其中f代表激活函数,使网络具有非线性能力。
常见的激活函数
此神经网络输出层有一个神经元,可用于回归问题或者二分类问题,回归问题最后一层不需要激活函数,二分类问题一般最后一层接一个sigmoid激活函数,输出一个(0,1)之间的数,大于等于0.5归为第一类小于0.5归为第零类。
若用于C(C>2)分类问题,则输出层应设置C个神经元,最后接一个softmax激活函数,输出每个类的概率分布,判别为概率最大的类。
二、代码实现 基于Tensorflow2.0 tf.keras
1.引入库
代码如下(示例):
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
2.读入数据
代码如下(示例):
data=pd.read_csv('dataset/Advertising.csv')#数据共四列,三个特征,一个类别
data.head()#查看数据概况
3.划分数据集
dataX=data.iloc[:,1:-1]
datay=data.iloc[:,-1]
train_X=dataX[:180]
train_y=datay[:180]
test_X=dataX[180:]
test_y=datay[180:]
使用tf.keras构建并训练多层前馈神经网络
model=tf.keras.Sequential([
tf.keras.layers.Dense(10,input_shape=(3,),activation='relu'),
tf.keras.layers.Dense(1)#回归问题,输出层一个神经元
]
)
model.summary()#查看模型概况
model.compile(
optimizer='adam',
loss='mse'
)#通过调用 compile 方法配置该模型的学习流程,回归问题使用均方误差损失函数
model.fit(train_X,train_y,epochs=100)#fit方法进行训练,训练100轮次
训练过程损失逐步下降
结果预测
print(model.predict(test_X))
print(test_y)
预测结果
真实结果
总结
提示:这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了多层感知器MLP的基本原理,并用tf.keras简单实现。