向毕业妥协系列之机器学习笔记:构建ML系统(三)

2023-10-22 23:59

本文主要是介绍向毕业妥协系列之机器学习笔记:构建ML系统(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.机器学习开发的迭代

二.误差分析

三.添加更多数据

四.迁移学习

五.机器学习项目的完整周期


一.机器学习开发的迭代

然后我们以识别垃圾电子邮件为例来讲解一下这个过程

如上图,结合英文看,右侧是一封电子邮件,咱们从英语字典里把最常用的10000个单词取出来,然后输入数据就是一个有10000个特征的向量,遍历邮件,出现了哪个单词,单词在x中的对应位置就置为1。另一种方式是不止置为1,而是记录对应的那个单词的出现次数。当然吴佬说置为1效果就很不错。

然后在我们开发的过程中,肯定还会遇到很多问题,需要咱们具体问题具体分析。

二.误差分析

就选择下一步要做什么来而言,偏差和方差的重要性是第一位的,误差分析是第二位的。

错误分析需要咱们手动来实现,如果数量比较多,比如验证集里有5000个训练示例,其中1000个被错误分类了,那么咱们可以从这1000个当中抽样100个来分析。

三.添加更多数据

获取大量的数据可能耗时,昂贵。有一种方法时基于已有的训练数据来新增训练数据,“数据增强”。

比如把带有字母A的图片进行旋转,放大,缩小,扭曲等操作,新生成新的图片,但这仍然代表字母A。

同样的,语音识别也可以应用这种技术,即给真实数据添加一点噪音形成新的数据。当然对现有数据进行修改和添加噪声等不是随意的操作,而是有针对性的,并且要检测的数据相似。

另一种新增数据的方法是“数据合成”。

传统的机器学习模型和现在的侧重点对比:

四.迁移学习

迁移学习可以把别的模型的部分参数直接拿到自己的模型中来用。看一下下面的例子就明白了。

                                                                                                                           注:fine tune:微调

上面的例子场景是现在我们想识别手写数字,但是手写数字的图片却不多,但是猫,狗,车和人的图片(1000个种类,所以最后输出层有1000个神经元,共一百万张图片)却充足,所以上图上面的那个模型是识别猫,狗,车,人等的模型;然后咱们现在要构建手写数字识别的模型,看到上图下面那个模型,也是五层的神经网络,前四层咱们直接把上面的那个模型已经训练好的前四层的参数直接拿过来用,然后现在是识别0~9,所以输出层有10个神经元,现在咱们只需要训练下面的这个模型的输出层的参数即可,前四层就不用训练了(因为直接借用了上面模型的前四层参数)。这时候我们需要的训练集大小就可以很小了,比如50张手写体数字的图片?So magic!

这个我们也有两种选择:

  1. 只训练手写体识别模型的输出层的参数
  2. 训练神经网络中所有的参数

 但是一般项目中是选择第二种方式,这就相当于给神经网络的前四层赋了一些初始值,虽然普通的神经网络训练的时候也会有初始值,但是迁移学习方式的这些初始值是已经经过了训练的初始值(虽然不是一个模型,但是难免还是会有一些共性存在)

现在很多研究者将他们的已经训练好的神经网络发布到网上,咱们只要把自己的输出层替换掉神经网络里的输出层即可,真的很适合迁移学习,极大地提高了我们的构建效率。

为什么迁移学习这么神奇呢?检测猫狗的模型竟然可以应用到手写体数字识别上,请看下面

检测猫狗的模型的前几层的参数已经学会了检测图像的边缘,角点,曲线,基本形状和一些非常通用的图像特征,这对其他很多计算机视觉任务都有用,如手写体数字识别。

 

由上图可知做迁移学习时,迁移过来的模型的输入数据的类型格式什么的要和自己输入的数据类型格式什么的一致才行。

五.机器学习项目的完整周期

下面来介绍一下生产环境下的部署:

这篇关于向毕业妥协系列之机器学习笔记:构建ML系统(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/264415

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20