深度学习MLP_实战演练使用感知机用于感情识别_keras

目录

      • (1)why deep learning is game changing?
      • (2)it all started with a neuron
      • (3)Perceptron
      • (4)Perceptron for Binary Classification
      • (5)put it all together
      • (6)multilayer Perceptron
      • (7)backpropagation
      • (8)实战演练-使用感知机用于感情识别
        • 1. 数据集划分
        • 2. 将文本转成vector
        • 3.对数据集进行预处理fit/transform/fit_transform
        • 4.创建模型并训练
        • 5、评估模型
      • (9)使用MLP来提升性能

link:https://towardsdatascience.com/multilayer-perceptron-explained-with-a-real-life-example-and-python-code-sentiment-analysis-cb408ee93141

(1)why deep learning is game changing?

传统的机器学习太依赖于模型,一般都需要有很多经验的专家来构建模型,而且机器学习的质量也很大程度上取决于数据集的质量和how well features encode the patterns in the data
深度学习算法使用人工神经网络作为主要的模型,好处就是不再需要专家来设计特征,神经网络自己学习数据中的characteristics
深度学习算法读入数据后,学习数据的patterns,学习如何用自己提取的特征来代表数据。之后组合数据集的特征,形成一个更加具体、更加高级的数据集表达形式。
深度学习侧重于使系统能够学习multiple levels of partern composition(组合)

(2)it all started with a neuron

1940 Warren McCulloch teamd up with Walter Pitts created neuron model
a piece of cake:
在这里插入图片描述
神经网络的首次应用是复制(replicated)了一个logic gate:
在这里插入图片描述
但是此时的神经网络没有办法像大脑一样学习,因为获得期望输出的前提是,魔性的参数要提前设置好
only a decade later, Frank Rosenblatt 创建了一个可以学习权重的模型:💥Perceptron💥

(3)Perceptron

Perception 最初是为了图像识别创造的,为了让模型具有人类的perception(感知),seeing and recognizing 图片的能力。
Perception模型核心就是neuron,主要不同就是输入被组合成一个加权和,如果这个加权和超过一个预设的阈值(threshold),神经网络就会被触发,得到一个输出。
在这里插入图片描述

(4)Perceptron for Binary Classification

Perceptron 用于二元分类问题的主要假设是数据是:linearly separable(线性可分):
在这里插入图片描述
神经网络的预测值:
f ( x ; w ) = s i g n ( ∑ i w i x i − T ) ∀ i = 1 , . . . , n f(x;w)=sign(\sum_i w_ix_i-T) \forall i=1,...,n f(x;w)=sign(iwixiT)i=1,...,n
神经网络的真实值(label): y i y_i yi
如果预测正确率的话: y i ⋅ f ( x ; w ) > 0 y_i \cdot f(x;w)>0 yif(x;w)>0
所以目标函数被设计为:
在这里插入图片描述
优化目标就是 min ⁡ D ( w , c ) \min D(w,c) minD(w,c)
和其他算法不同,这个目标函数不能求导,所以Perceptron使用 Stochastic Gradient Descent(随机梯度下降法)来最小化目标函数(如果数据集是线性可分的,就可以使用这个方法,并且在有限的steps内converge收敛)
在这里插入图片描述
对于足够小的正数 r r r,我们就能保证 L ( w 1 ) < L ( w ) L(w_1)<L(w) L(w1)<L(w)

Perceptron使用的激活函数是sigmoid function,这个函数把数值映射成一个0~1值:
在这里插入图片描述
之前总结过的sigmoid图:
在这里插入图片描述

  • 非线性函数
  • 值在0到1之间
  • 它有助于网络更新或忘记数据。如果相乘结果为0,则认为该信息已被遗忘。类似地,如果值为1,则信息保持不变。
    但是用的更多的是 Rectified Linear Unit (ReLU):
    在这里插入图片描述
    为什么更多使用ReLU?因为它可以使用随机梯度下降进行更好的优化,并且是尺度不变的,这意味着它的特征不受输入规模的影响。(没大搞懂)

(5)put it all together

神经网络输入数据,最初先随机设置权重,然后计算加权和,在通过激活函数ReLU,得到输出:
在这里插入图片描述
之后Perceptron使用随机梯度下降法,learn 权重,来最小化错误分类的点和决策边界(decision boundary)的距离,一旦收敛,数据集就会被线性超平面(linear hyperplane)分成两个区域
❌感知机不能表示XOR门(只有输入不同,返回1)
Minsky and Papert, in 1969 证明了这种只有一个神经元的Proceptron不能处理非线性数据,只能处理线性可分的数据

(6)multilayer Perceptron

多层感知器就是为了处理非线性可分问题的
多层感知器含有输入层、输出层、一个或者多个隐藏层
在这里插入图片描述
多层感知器和单层的一样将输入由最初随机的权重进行加权和再经过激活函数得到输出,但是不同的是,每个线性组合会传递给下一层:前向传播
但是只有秦香传播,就不能学习到能使得目标函数最小的权重,所以之后引入反向传播

(7)backpropagation

反向传播以最小化目标函数为goal,是的MLP能够迭代的调整神经网络的权重
⚡️反向传播的必要条件: 神经网络输入的加权和( ∑ i w i ⋅ x i \sum_i w_i \cdot x_i iwixi)、激活函数(ReLU)必须是可微分的
在这里插入图片描述
在每次迭代iteration,当所有层的加权和都被前向传播之后,计算所有输入和输出对的Mean Squared Error(均方差) 的梯度,之后让第一个隐藏层的权重更新为这个梯度,这个过程将抑制持续,直到所有的输入输出对都收敛,意味着新的梯度不能改变收敛阈值。
其实还是有点没搞懂这个过程,我记得陈木头?这个博主讲的害挺清晰的,之后再看看

(8)实战演练-使用感知机用于感情识别

识别一句话到底是“好话”还是“坏话”
在这里插入图片描述

1. 数据集划分

使用train_test_split 函数

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)
  • X和y:表示输入数据和对应的标签
  • test_size:表示测试集所占的比例,这里设置为 0.1,表示测试集占原始数据集的 10%。
  • random_state:表示随机数种子
    • 数据集划分为什么要用到随机数:数据集的划分方式可能会影响到算法的性能和稳定性。如果数据集的划分方式不够随机,那么算法可能会偏向于某些特定的数据集,从而影响算法的准确性和泛化能力。
    • 设置固定的随机数的好处:设置了随机数种子后,每次运行程序时都能得到相同的数据集划分,是因为函数使用了指定的随机数种子来生成随机数。这样,每次运行程序时生成的随机数都是相同的,从而保证了数据集的划分结果相同。如果我们将 random_state 设置为 None,那么每次运行程序时都会得到不同的数据集划分。
2. 将文本转成vector

使用Term Frequency — Inverse Document Frequency (TF-IDF):该方法将任何类型的文本编码为每个单词或术语在每个句子和整个文档中出现频率的统计数据。

from sklearn.feature_extraction.text import TfidfVectorizer
TfidfVectorizer(stop_words='english', lowercase=True, norm='l1')
# 删除英语停顿词,应用L1规范化

sklearn 是 Python 中一个流行的机器学习库,全名 scikit-learn。它提供了大量的分类、回归、聚类、降维和数据处理等算法,可以用于处理和分析数据,以帮助用户进行数据建模、预测和分类等任务。sklearn 基于 NumPy、SciPy 和 matplotlib,使用这些库的功能来提供高效的算法实现。

3.对数据集进行预处理fit/transform/fit_transform

参考链接:fit_transform,fit,transform区别和作用详解!!!!!!
TfidfTransformer举例
在较低的文本语料库中,一些词非常常见(例如,英文中的“the”,“a”,“is”),因此很少带有文档实际内容的有用信息。如果我们将单纯的计数数据直接喂给分类器,那些频繁出现的词会掩盖那些很少出现但是更有意义的词的频率。

  • fit:求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。
    • fit(raw_documents, y=None):根据训练集生成词典和逆文档词频 由fit方法计算的每个特征的权重存储在model的idf_属性中。
  • transform:在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。
    • transform(raw_documents, copy=True):使用fit(或fit_transform)学习的词汇和文档频率(df),将文档转换为文档 - 词矩阵。返回稀疏矩阵,[n_samples, n_features],即,Tf-idf加权文档矩阵(Tf-idf-weighted document-term matrix)。
  • fit_transform:fit_transform是fit和transform的组合,既包括了训练又包含了转换。fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
    • 必须先用fit_transform(trainData),之后再transform(testData)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)
# 根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。
4.创建模型并训练
from sklearn.linear_model import Perceptron
classifier = Perceptron(random_state=457)
classifier.fit(train_features, train_targets)
  • sklearn.linear_model.Perceptron:感知机模型

    • class sklearn.linear_model.Perceptron(*, penalty=None, alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, eta0=1.0, n_jobs=None, random_state=0, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, warm_start=False
    • 在这里插入图片描述
  • model.fit函数:训练模型,返回loss和测量指标(history)

    • model.fit(x, y, batch_size, epochs, verbose, validation_split, validation_data, validation_freq)
      在这里插入图片描述
    • callback=callbacks.EarlyStopping(monitor=‘loss’,min_delta=0.002,patience=0,mode=‘auto’,restore_best_weights=False)
      • monitor:监视量,一般是loss。
      • min_delta:监视量改变的最小值,如果监视量的改变绝对值比min_delta小,这次就不算监视量改善,具体是增大还是减小看mode
      • patience:如发现监视量loss相比上一个epoch训练没有下降,则经过patience个epoch后停止训
      • mode:在min模式训练,如果监视量停止下降则终止训练;在max模式下,如果监视量停止上升则停止训练。监视量使用acc时就要用max,使用loss时就要用min。
      • restore_best_weights:是否把模型权重设为训练效果最好的epoch。如果为False,最终模型权重是最后一次训练的权重
    • model.fit( )函数返回一个History的对象,即记录了loss和其他指标的数值随epoch变化的情况。
5、评估模型
predictions = classifier.predict(test_features)
score = np.round(metrics.accuarry_score(test_labels, predictions), 2)
  • model.predict(X_test, batch_size=32,verbose=1)
    • X_test:为即将要预测的测试集
    • batch_size:为一次性输入多少张图片给网络进行训练,最后输入图片的总数为测试集的个数
    • verbose:1代表显示进度条,0不显示进度条,默认为0
    • 返回值:每个测试集的所预测的各个类别的概率
    • 例子:
      # 各个类别评估(X_test为10000个数据集)
      print("[INFO] evaluating network...")
      predictions = model.predict(X_test, batch_size=32) #显示每一个测试集各个类别的概率,这个值的shape为(10000,10)
      print(predictions)
      print(predictions.shape)
      
    • 在这里插入图片描述
    • model.predict(X_test, batch_size=32)的返回值为每个测试集预测的10个类别的概率
  • metrics.accuarry_score:计算分类的准确率
    • sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
    • normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数
    • true: 在这里插入图片描述
    • false:TP+TN
    >>>import numpy as np  
    >>>from sklearn.metrics import accuracy_score  
    >>>y_pred = [0, 2, 1, 3]  
    >>>y_true = [0, 1, 2, 3]  
    >>>accuracy_score(y_true, y_pred)  
    0.5  
    >>>accuracy_score(y_true, y_pred, normalize=False)  
    2

在这里插入图片描述
完整代码:

在这里插入图片描述

(9)使用MLP来提升性能

  • 激活函数:参数activation=’relu’
  • 使用随机梯度下降算法:solver=’sgd’
  • 学习率:learning_rate=’invscaling’这是啥啊
  • 迭代次数:max_iter=20
    代码:
    在这里插入图片描述
    使用的MLP是有3个隐藏层,每个隐藏层有两个节点
    此时的性能并不好
    当把num_neurons=5之后,性能就变好了
    这就是调参!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229552.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识Linux下进程

&#x1f30e;初识进程 初识进程 简单认识一下进程 如何管理进程 进程属性信息 内核运行队列 查看进程 通过系统调用获取进程标识符       父子进程       查看运行中的进程 总结 前言&#xff1a; 我们在电脑上点开的一个个应用&#xff0c;其实就是一个个进程&am…

CMake支持的编译平台和IDE

文章目录 简介支持的IDEVisual Studio支持示例 其他编译器和生成器支持MinGW示例 IDE集成Eclipse示例 实验性和特殊平台支持总结 简介 CMake是一个非常强大的跨平台自动化构建工具&#xff0c;它支持生成多种类型的项目文件&#xff0c;覆盖了广泛的开发环境和编译器。在这篇博…

【Java】SpringBoot整合xxl-job学习使用详解

文章目录 介绍作用如何使用下载项目中央仓库地址环境调度中心初始化“调度数据库”配置部署“调度中心”部署项目调度中心集群&#xff08;可选&#xff09;其他&#xff1a;Docker 镜像方式搭建调度中心配置部署“执行器项目” 执行器maven依赖执行器配置执行器组件配置执行器…

天津Java入门培训班 如何选择Java机构?

作为最受欢迎的编程语言&#xff0c;Java简直是IT领域的敲门砖&#xff0c;只要精通Java语言&#xff0c;找到好工作&#xff0c;进入大企业又多了一层保障。很多人都向往Java编程的广阔就业前景&#xff0c;却苦于不懂Java编程知识&#xff0c;一直在自学和参加培训中纠结。 …

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式&#xff1f;2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式&#xff1f;3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…

LinkedList与ArrayList的比较

1.LinkedList 基于双向链表&#xff0c;无需连续内存 随机访问慢&#xff08;要沿着链表遍历&#xff09; 头尾插入删除性能高 占用内存多 2.ArrayList 基于数组&#xff0c;需要连续内存 随机访问快&#xff08;指根据下标访问&#xff09; 尾部插入、删除性能可以&…

挑战 ChatGPT 和 Google Bard 的防御

到目前为止&#xff0c;科学家已经创建了基于人工智能的聊天机器人&#xff0c;可以帮助内容生成。我们还看到人工智能被用来创建像 WormGPT 这样的恶意软件&#xff0c;尽管地下社区对此并不满意。但现在正在创建聊天机器人&#xff0c;可以使用生成人工智能通过即时注入活动来…

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜,Kotlin(1)

Android Matrix剪切clipPath缩放scale图片postTranslate圆形放大镜&#xff0c;Kotlin&#xff08;1&#xff09; 实现查看图片的放大镜&#xff0c;放大镜随着手指在屏幕上的移动&#xff0c;放大镜里面展示手指触点为中心、半径长度的圆形放大后的图片。 剪切出一块圆形Path…

K8S集群部署MySql

挂载MySQL数据卷 在k8s集群中挂载MySQL数据卷 需要安装一个NFS。 在主节点安装NFS yum install -y nfs-utils rpcbind 在主节点创建目录 mkdir -p /nfs chmod 777 /nfs 更改归属组与用户 chown -R nfsnobody:nfsnobody /nfs 配置共享目录 echo "/nfs *(insecure,rw,s…

大数据平台Bug Bash大扫除最佳实践

一、背景 随着越来越多的"新人"在日常工作以及大促备战中担当大任&#xff0c;我们发现仅了解自身系统业务已不能满足日常系统开发运维需求。为此&#xff0c;大数据平台部门组织了一次Bug Bash活动&#xff0c;既能提升自己对兄弟产品的理解和使用&#xff0c;又能…

【已解决】打印PDF文件,如何跳过不需要的页面?

打印PDF文件的时候&#xff0c;有时候我们只需要打印其中的几页&#xff0c;并不需要全部打印&#xff0c;那如何在打印时跳过那些不需要的页面呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 如果你是通过网页打开PDF文件&#xff0c;那么可以在页面中找到并点击“打…

k8s的声明式资源管理

在k8s当中支持两种声明资源的方式&#xff1a; 1、 yaml格式&#xff1a;主要用于和管理资源对象 2、 json格式&#xff1a;主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件&#xff0c;所有的内容都…

内存管理机制

内存管理机制与内存映射相关。 一、C与C 之所以将C与C放在一起是因为C是C的超集&#xff1b; 但是C是面向过程语言&#xff0c;C是面向对象的语言&#xff1b; C与C都可以使用malloc、calloc、realloc来申请内存空间&#xff1b; 其中void* malloc(size_t size)是在内存的动态…

2023年度回顾:怿星科技的转型与创新

岁月不居&#xff0c;时节如流。随着2023年的落幕&#xff0c;怿星科技在这一年中不仅实现了自身的转型&#xff0c;还在技术创新、产品研发、行业合作和人才培养等方面取得了显著的成就。这一年&#xff0c;怿星科技正式完成了从服务型公司向产品型公司的战略转变&#xff0c;…

软件测试方法分类-按照开发阶段划分细讲

前面我给出了整体的软件测试分类&#xff0c;那么接下来&#xff0c;我会将每个分类进行细讲。 第一个我们要说到的就是按照开发阶段划分。 我们都知道软件测试方法分类中&#xff0c;如果按照开发阶段划分&#xff0c;可以分为&#xff1a; 1&#xff0c;单元测试 (Unit Te…

VMware 虚拟机 ubuntu 20.04 硬盘扩容方法

前言 最近由于需要编译 【RK3568】的 Linux SDK&#xff0c;发现 虚拟机默认的 200G 空间不足了&#xff0c;因此想增加这个 200G 空间的限制&#xff0c;通过网络上查找了一些方法&#xff0c;加上自己亲自验证&#xff0c;确认 硬盘扩容 正常&#xff0c;方法也比较的容易&a…

P5534 【XR-3】等差数列————C++、C

目录 【XR-3】等差数列题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 【XR-3】等差数列 题目描述 小 X 给了你一个等差数列的前两项以及项数&#xff0c;请你求出这个等差数列各项之和。 等差数列&#…

如何使用idea部署springboot项目全过程

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

k8s的陈述式管理

k8s的陈述式管理&#xff1a; 所谓的陈述式管离也就是命令行工具 优点&#xff1a;90%以上都可以满足 对资源的增删查比较方便&#xff0c;对改不是很友好 缺点&#xff1a;命令比较冗长&#xff0c;复杂&#xff0c;难记 声明式&#xff1a; k8s当中的YAML文件来实现资源管…

对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

前言 一个web系统&#xff0c;从接口的使用范围也可以分为对内和对外两种&#xff0c;对内的接口主要限于一些我们内部系统的调用&#xff0c;多是通过内网进行调用&#xff0c;往往不用考虑太复杂的鉴权操作。但是&#xff0c;对于对外的接口&#xff0c;我们就不得不重视这个…