上一节用到的简单线性回归模型是单个神经元,计算输入特征的加权和,然后使用一个激活函数(或传递函数)计算输出。本节介绍一下多层神经网络的相关概念以及代码的实现方法。

单个神经元的缺陷——"无法拟合异或"

单个神经元的关系是:

单个神经元

但是单层神经元存在一个很大的缺陷,那就是无法拟合“异或”运算:

异或元算

异或的运算方法是一个二进制运算: 两者相等为0,不等为1

神经元要求数据必须是线性可分的,异或问题无法找到一条直线分割两个类。

多层感知器

为了继续使用神经网络解决这种不具备线性可分性的问题采取在神经网络的输入端和输出端之间插入更多的神经元。

多层感知器

所谓多层感知器,他的特点就是多层。

常用的激活函数

类似大脑神经,进行信号传递。举个例子,假如将手放在逐渐升温的钢锅上,一旦温度超过某个阈值,你就会急切地要拿开手。把手移开时并不需要知道锅的确切温度,而是根据实际参数做出选择。这是神经元在放电,当神经元放电时,指令传递到外围(本例中的手)。这就是激活函数的来源或者至少与之相似。在这里实际数据是冗余的,神经元只需判断其是否超过阈值。就目前所知,生物神经元和人工神经元之间的一个显著差异是,前者要么被激活,要么不被激活,只有两种结果,而后者的激活程度是在一定范围内。

下面是几个常用的激活函数:

  • relu

relu激活函数

relu是一个比较好的激活函数,没有被激活时输入0,被激活时,f(x)=x,原样输出。

  • sigmoid

sigmoid激活函数

  • tanh

tanh函数

  • leak relu

leak relu函数

多层感知器的代码实现

数据的含义就是分别在TV、radio、newspaper上的投放量与销售之间的关系。目标数据是sales。按理说广告投放量越多,销量也越多。先简单看一下三者与销量之间的关系。

三者与销量之间的关系

在建立关系的时候,x取TV、radio、newspaper,分别是第二列、第三列、第四列。y取最后的sales。

知识补充:pandas里的取行和列使用iloc函数,具体介绍可以参考下文,有代码示例:

Python Pandas数据分析之iloc和loc的用法详解

建立的神经网络结构如下图所示:

神经网络的结构

为什么中间层有40个参数呢?最后为什么是11个参数呢?

参数数量的解释

设置adam优化器,损失函数使用mse,迭代训练100次,最后用10组数据来查看计算效果。

训练的效果

完整代码:

import tensorflow as tf
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("Advertising.csv")

x = data.iloc[:,1:-1]  # 取所有的行,取列除去第一列和最后一列
y = data.iloc[:,-1]    # 取sale一列,最后一列

model = tf.keras.Sequential([tf.keras.layers.Dense(10,                      #假设做10个单元的隐含层 
                                                   input_shape=(3, ),       #告诉输入的数据类型,是一个三维的数据
                                                   activation='relu'),        # 添加激活函数,使用relu函数来激活
                             # 添加输出层
                             tf.keras.layers.Dense(1)                     
                            ]) 

model.summary()  # 查看神经网络的结构
# 配置优化器和损失函数
model.compile(optimizer="adam",
              loss="mse"
             )
model.fit(x,y,epochs=100) #开始训练,训练100次

#  ..........训练完成...............
# 做一个测试,比如用前面十个值作为预测输入,看看通过这个模型得到的结果
test_input = data.iloc[:10, 1:-1]
print(model.predict(test_input))


用到的数据集下载:

数据集下载

数据集


参考资料:

你了解激活函数吗?几种常用的激活函数


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/MultilayerPerceptron.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 09 月 08 日
如果觉得我的文章对你有用,请随意赞赏