大白话5分钟带你走进人工智能-第35节神经网络之sklearn中的MLP实战(3)

本节的话我们开始讲解sklearn里面的实战:

先看下代码:

from sklearn.neural_network import MLPClassifier

X = [[0, 0],
     [1, 1]]
y = [0, 1]

clf = MLPClassifier(solver=‘sgd‘, alpha=1e-5, activation=‘logistic‘,
                    hidden_layer_sizes=(5, 2), max_iter=2000, tol=1e-4)
clf.fit(X, y)

predicted_value = clf.predict([[2, 2],
                               [-1, -2]])
print(predicted_value)
predicted_proba = clf.predict_proba([[2., 2.],
                                     [-1., -2.]])
print(predicted_proba)

print([coef.shape for coef in clf.coefs_])
print([coef for coef in clf.coefs_])

我们依次解释下:

在sklearn里面,我们需要

from sklearn.neural_network import MLPClassifier

这样来导入神经网络这个模块,如果做分类,就是MLPClassifier,它和神经网络什么关系?它叫做多层感知机。这里是用它做分类的一个算法。

接下来



X = [[0, 0],
     [1, 1]]
y = [0, 1]

人为地构建了一个数据集, X矩阵里面有两行两列, Y是构建了两行一列,分别是分类号,负例和正例。

如何使用多层感知机呢?

先创建一个对象MLPClassifier:



clf = MLPClassifier(solver=‘sgd‘, alpha=1e-5, activation=‘logistic‘,
                    hidden_layer_sizes=(5, 2), max_iter=2000, tol=1e-4)

解释下这些参数:solver就是选择最优解的算法,随机梯度下降SGD;alpha是L2正则前面的超参数;activation=logistic意味着每一个神经元最后的function是Sigmoid函数;max_iter是最大迭代次数,如果迭代次数达到2000次,我们就把2000的结果作为最优解;tol是收敛的阈值,如果在2000次内达到了阈值,就停了。

我们再来看下MLP的源码参数:

?

学习率是learning_rate,如果是constant就是一直保持学习率的值,如果是invscaling就是根据公式来每次迭代算学习率。

activation如果是logistic,就是sigmod函数;如果是tanh,就是-1到+1;如果是relu,就是max(0,z),平时用的时候就是这些个。

最关键的是hidden_layer_sizes隐藏层的节点数



hidden_layer_sizes=(5, 2)
 

(5,2)意思是有两个隐藏层,第一个隐藏层有五个神经元,第二个隐藏层有两个神经元。为什么要写成(5,2)?因为如果第一个隐层H1有五个神经元,第二层有两个神经元,这两个隐藏层之间要算多少个连线的w呢?就是五行两列,十个连线上的w。可以直接计算出来。

MLP多层感知机,它其实就只是全连接,如果你不是全连接它就不能叫多层感知机了,而sklearn里面只有多层感知机。

它是层与层之间的网络拓扑,x数据里面有两个x,相当于第一个输入层有两个神经元x1,x2。我们把隐藏层设五个隐藏节点,所以隐藏里分类点就有5个。所以输入层到第一个隐藏层的w矩阵,它的形状是两行五列。

第二个隐藏层设置是两个神经元,第二个w矩阵就是五行两列,因为这里是做一个二分类, Y的标签里面就两个类别号,所以它是做二分类,二分类需要一个输出节点就够了。所以最后一个矩阵它是两行一列。以下是这个网络拓扑结构图:

?



clf.fit(X, y)
 

fit后就可以来计算出来最终的w参数、模型。

有了分类器这个模型,我们就可以通过predict进行预测:



predicted_value = clf.predict([[2, 2],
                               [-1, -2]])
 

意思是未来给它一个x,它可以给你y。预测结果如下:

?

predicted_value是两行一列的,如果用的是predicted_proba,有什么区别呢?



predicted_proba = clf.predict_proba([[2., 2.],
                                     [-1., -2.]])
 

在sklearn里面,用predicted_proba,它给出的是概率值,打印结果如下:

?



print([coef.shape for coef in clf.coefs_])
 

Clf.coefs_,就是把这些w全部拿出来,然后for循环这些w,它是分层的。然后看shape,就可以清晰地知道,从输入层到第一个隐藏层,中间网络拓扑是什么样子的,然后第一个隐藏层到第二个隐藏层,以此类推。如果我们直接把coef的打印输出的话,我们就可以直接拿到层与层之间的w矩阵具体值是什么样子的。结果如下:

?

我们从线性代数矩阵相乘的概念去解释最后的输出:

x数据集是一个两行两列的数据:

输入层和第一个隐藏层之间w矩阵是两行五列

?

它们点积两行两列*两行五列=两行五列的数据。判断是两行五列之后,还要再跟第一个隐藏层和第二个隐藏层之间五行两列的w矩阵相乘,

?

得到的就是两行五列*五行两列=两行两列的结果,最后和两行一列的相乘:

?

得到的是两行两列*两行一列=两行一列的?,因为x是两行,所以最后得到的是两个?。

完美~~~解释!!哈哈。

真正去做predict时候,就是把某一条数据带起来,分别做一个正向传播,如果用predict,结果和0.5比较进行判别,给出分类号;如果是predict_proba它不用根据0.5进行判别,直接输出概率。

不管数据量有多少,只要写的是SGD,就会在每次迭代的时候选x数据集里面的一部分数据来进行训练,因为总共2000次迭代,迭代次数越多,相当于所有的数据都会被随机到。

总结下神经网络需要考虑三件事情:第一个是设置激活函数第二个是设置网络拓扑,就是构建一个神经网络时,它有多少层,然后每一层有神经元的个数。这里是做分类的,输入和输出层不用设置,输入层、输出层有多少神经元,根据它有多少个x,和y多少个分类,它就会自动设置神经元。把网络拓扑定下来,第三就是需要去设置有多少个隐藏层,每层有多少个神经元,那么一个元组来表达(5,2),告诉这里有两个隐藏层,数值是每个隐藏有多少个神经元。一百层就是元组里有一百个数。比如三个隐藏层(10,8,15),意思是第一个隐藏层10个神经元,第二个隐藏层8个神经元,第三个隐藏层15个神经元。里面的值是随便定的。怎么设置是没有方法设置,这个是调的,咱们的工作。后期深度学习里面咱们说案例,都会去判别它的准确率,然后根据准确率判别有没有过拟合,在深度学习里面都会奔着过拟合的方向去调,如果过拟合再往回调。比如设置100个隐藏层,我发现50个隐藏层的效果跟100个一样,那么就设置50个,训练得更快,使用的时候正向传播也更快,这个值是调的。不同的应用方向,比如卷积神经网络或者循环神经网络,参数设置是有一些规律的,它但是没有一个死的数,还是根据规律来调的。

激活函数是统一设置的,在神经网络拓扑里面,每一个神经元的激活函数都是一样的,都是统一的,在神经网络里面是这样,在深度学习里面也是这样。假如设置了ReLU,隐藏层,输出层,激活函数都是ReLU,如果是Sigmoid,它都是Sigmoid。对于sklearn来说,就必须得是统一的。

对于tensorflow来说,它给了更多的自由度,可以让每一层都是一样的,但是层与层之间可以设置不一样的。

下面进入Q&A环节:

w矩阵的顺序是什么样的,也就是每一层和每一层之间的w的形状是什么样的?

比如有两个隐藏层,第一个隐藏层H1有五个神经元,第二个隐藏层H2有两个神经元,连接一定是5*2有10个连接,w矩阵就是五行两列的。

每个神经元的位置谁放上,谁放下无所谓。因为中间的隐藏节点,它具体代表什么含义是我们不管的,因为我们没法知道它具体代表什么含义。

原文地址:https://www.cnblogs.com/LHWorldBlog/p/11387328.html

时间: 2024-10-03 11:16:31

大白话5分钟带你走进人工智能-第35节神经网络之sklearn中的MLP实战(3)的相关文章

大白话5分钟带你走进人工智能-第34节神经网络之多神经网络概念(2)

目录 1.回顾: 2.常见的激活函数都有哪些? 3.多层神经网络里面故事: 4.如何训练神经网络? 1.回顾: 回顾下之前学习的内容.人工神经网络里面有重要的三条内容,一个是加和,加function,把前面的输入所对应模型的权重相乘相加,第二经过一个非线性变化,第三signal out输出.如果把function设置为Sigmoid函数,它相当于是一个逻辑回归. 2.常见的激活函数都有哪些? ? 第一个叫01函数,它要么就是0,要么就是1: 第二个叫Sigmoid函数: ? 可以是linear:

大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)

                                                    大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5) 上一节中,我们讲解了逻辑回归的优化,本节的话我们讲解逻辑回归做多分类问题以及传统的多分类问题,我们用什么手段解决. 先看一个场景,假如我们现在的数据集有3个类别,我们想通过逻辑回归建模给它区分出来.但我们知道逻辑回归本质上是区分二分类的算法模型.难道没有解决办法了吗?办法还是有的,既然想分出3类,我们姑且称这3个类

大白话5分钟带你走进人工智能-目录

                                                                                目录 大白话5分钟带你走进人工智能-第一节开篇介绍以及线性回归简介篇 大白话5分钟带你走进人工智能-第二节概率基础及高斯分布 大白话5分钟带你走进人工智能-第三节最大似然推导mse损失函数(深度解析最小二乘来源)(1) 大白话5分钟带你走进人工智能-第四节最大似然推导mse损失函数(深度解析最小二乘来源)(2) 大白话5分钟带你走进人工智

大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则

                                                                                                  第十四节过拟合解决手段L1和L2正则 第十三节中,我们讲解了过拟合的情形,也就是过度的去拟合训练集上的结果了,反倒让你的模型太复杂.为了去解决这种现象,我们提出用L1,L2正则去解决这种问题. 怎么把正则应用进去?我们重新审视目标函数,以前我们可以理解目标函数和损失函数是一个东西.而有正则的含义之后,目

大白话5分钟带你走进人工智能-第二十五节决策树系列之信息增益和信息增益率(4)

                                                       第二十五节决策树系列之信息增益和信息增益率(4) 上一节我们讲解了决策树的分裂条件以及评估纯度的其中一个方式,基尼系数.本节的话,我们再讲解一个评估纯度的方式,基于信息增益的方式,即ID3树使用的评估方式.它办的事跟Gini系数一样,也是评价纯度,但是它更客观一点,但它算起来比Gini系数稍慢一点,它办的事跟Gini系数一样,也是评价纯度,但是它更客观一点,算起来比Gini系数稍慢一点,

大白话5分钟带你走进人工智能-第二十八节集成学习之随机森林概念介绍(1)

                                                      第二十八节集成学习之随机森林概念介绍(1) 从本系列开始,我们讲解一个新的算法系列集成学习.集成学习其实是怎么样去应用决策树解决一些问题. 在机器学习领域集成学习是一种非常简单直接的提升分类器回归器预测效果的一种思路.决策树有一个困境,当层数太深的时候会有过拟合问题,当我不想过拟合,就通过预剪枝给它砍掉一部分深度,此时损失又容易太大了,导致在训练集上预测的又不怎么准.所以对于决策树很难去找

大白话5分钟带你走进人工智能-第十八节逻辑回归之交叉熵损失函数梯度求解过程(3)

                                               第十八节逻辑回归之交叉熵损失函数梯度求解过程(3) 上一节中,我们讲解了交叉熵损失函数的概念,目标是要找到使得损失函数最小的那组θ,也就是l(θ)最大,即预测出来的结果在训练集上全部正确的概率最大.那我们怎么样找到我们的最优解呢?上节中提出用梯度下降法求解,本节的话我们对其具体细节展开. 先来看下我们用梯度下降求解最优解,想要通过梯度下降优化L(θ)到最小值需要几步? 第一步,随机产生w,随机到0附近会

大白话5分钟带你走进人工智能-第十九节逻辑回归之优化点(4)

                                                                                      第十九节逻辑回归之优化点(4) 上一节中我们讲解了逻辑回归导函数求解的问题,一步步推导出交叉熵损失函数的梯度.很是不容易,这节中我们一起看下逻辑回归的优化有哪些点? 第一点关于逻辑回归优化:和多元性回归是一模一样.要不要设置w0?比如下图: ? 之前说多元性回归是做拟合,假如现在要分类的话,我们知道分类对于一维来说是找一个点,

【密码学】一万字带您走进密码学的世界(上)

引文 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于破译密码以获取通信情报的,称为破译学,总称密码学. 为了使读者对密码学有一个整体的认识,本文简述了常见的密码学的概念,其中本文包括对称密码,哈希函数.<一万字带您走进密码学的世界(下)>包括非对称密码,数字签名,数字认证等,需要指出的是文中并没有深入探讨加密算法原理,关于此部分内容,后续的文章会详细阐述.本文的主要内容如下图所示: 对称密码 在对称密码体系中,相同的密码用来