多层感知器MLP以及Tensorflow2.0 tf.keras代码实现

一、多层感知器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简单实现。

猜你喜欢

转载自blog.csdn.net/weixin_44599230/article/details/120696993