产品经理也能动手实践的AI(三)- 深入图像识别,在线辨猫

本文介绍了产品经理如何动手实践图像识别,特别是针对猫咪物种的识别。通过整理图片数据,训练模型,调整参数,最终将AI发布到线上。文章详细讲解了数据整理、模型训练、损失函数和SGD原理,以及线上部署的过程。
摘要由CSDN通过智能技术生成

上一篇讲了产品经理也能动手实践的AI(二)- 做个识别宠物的AI,今天讲如何自己选择要识别的物种(我选了3种猫),做成AI,并把它发布到线上,长按下图二维码即可体验。

640?wx_fmt=jpeg

接下来说今天的主要内容,我发现这样的梳理过程真的能够强化知识,推荐大家真的想学一样东西都用这种方式,当你能向别人表达清楚的时候,也就是学会了。

概览

首先今天的训练数据需要自己整理,不过比想象中的简单,借助google 图片就可以;然后训练环节和上一节没差多少,不过其中的原理会展开讲解;最后发布到线上可以借助onrender.com或者Google Cloud,都已经测通,主要部署分2部分内容,一个是训练好的模型,一个是应用展示的文件。

核心步骤

  1. 把每一个种类的图片url整理出来

  2. 把图片批量下载下来

  3. 创建数据堆 DataBunch

  4. 训练模型

  5. 调节到更高的准确率

  6. 发布到线上

期中3-5上一讲已经描述过了,这一节主要讲1.2.6,同时这一节有比较多的数学相关的内容,主要是SGD(随机梯度下降),看起来很复杂,但只要有耐心看个2-3遍,其实还是可以理解的。

核心数学概念

  • 均方差 MSE:两个数差的平方的平均值,是loss的值,是预测和实际偏差的大小。

  • 最大自变量点集 argmax:是一个函数,在实际应用中是求一堆值当中最大的那个的索引值

  • 点积 dot product:比如a = [a1, a2,…, an] b = [b1, b2,…, bn] a·b=a1b1+a2b2+……+anbn。

  • 矩阵乘积 matrix product:2个矩阵相乘的和

  • 线性函数 linear function:y = ax + b

  • 导数 derivative:可简单理解为斜率

  • 梯度 gradient:更多维度的斜率,比如看到一个坑,哪一边到坑底的路线最陡峭,就是梯度最大

  • y上面带了个帽子 ŷ:一般指代预测值

核心专业词汇

  • 向量 vector:一维的数组,比如[ 2 , 3 ]

  • 矩阵 matrix:二维的数据,比如[ [ 2 , 3 ] , [ 4 , 5 ] ]

  • 张量 tensor:一种形状规则的数组,向量也叫一阶张量,矩阵叫二阶张量,还有三阶五阶张量……

  • 学习率 learning rate:一个乘以梯度来决定权重变化大小的值

  • 拟合 fit:形象的说,就是把平面上一系列的点用一条光滑的曲线连接起来

  • 一波数据 epoch:把数据完整使用一遍叫1个epoch

  • 迷你批次 mini-batches:当数据量太大时,每次训练会随机抽去样本数据用来训练,多个mini-batches可以组成1个epoch

  • 模型 model/architecture:通过权重值去拟合的函数

  • 权重值 parameters/coefficients/weights:也叫系数、参数,用来控制函数图形,来拟合训练数据形成的规律

  • 损失函数 loss function:一个用来计算预测值和实际值偏差大小的函数

  • 欠拟合/过度拟合 underfitting/overfitting:前者有点像大趋势,就是谁都能判断的;后者像细节规律往往是因人而异不能一概论之

示例详细讲解

首先是整理图片数据,想象中是个很头疼的问题,貌似要掌握爬虫技巧,但这里有种更便捷的方式,就是打开chrome的开发者工具,然后粘贴如下代码,就可以把当前页的图片url都打包成一个csv文件下载下来

640?wx_fmt=png

然后是下载图片和清理无效图片,Jeremy非常贴心的把这些细枝末节的命令都提供好了,真的是在用一种解决问题的思路写教程,而不仅仅是为了严谨。

download_images(path/file, dest, max_pics=200)verify_images(path/c, delete=True, max_workers=8)

而且自己整理数据的时候还会遇到没有验证组数据的问题,这里有个参数叫valid_pct,可以直接设定一个比例,系统会自动划分出验证组的数据。

data = ImageDataBunch.from_folder(path, train=".", valid_pct=0.2, ds_tfms=get_transforms(), size=224, num_workers=4).normalize(imagenet_stats)

然后经过了和上一篇类似的训练,现在想优化error rate,那就用到了上次没展开说的工具,FileDeleter

from fastai.widgets import * losses,idxs = interp.top_losses() top_loss_paths = data.valid_ds.x[idxs] fd = FileDeleter(file_paths=top_loss_paths)

通过这个就可以找出异常的图片,借助人类的判断,把干扰图片清除

640?wx_fmt=png

最后课程演示了一个在Jupyter Notebook中部署的逻辑,有利于了解其中的原理,想直接部署到线上也很简单,https://course.fast.ai/deployment_render.html 这是官网部署的教程。

原理详细讲解

这一节讲了非常多的概念和原理,但主要都是围绕SGD,这个最普遍的、模型训练时,所依赖的原理。首先看这张图,中间的状态就是想通过SGD实现的效果,但为了简化,我们先从一个最简单的案例去理解。

640?wx_fmt=png

先来一个最简单的,假设蓝点是输入的数据,橙点是预测的数据,预测的数据是根据训练好的模型计算出来的,而这个训练好的模型是一个线性函数,就是一条直线,,所以这节课演示的就是如何根据蓝色的点,预测出这个线性函数。

640?wx_fmt=png

过程中Jeremy老师做的非常详细,包括蓝色点点是如何通过一个随机函数生成出来的,都详细的讲解了,太负责任了……但这里不过多讲解,只说核心。

首先生成好了训练数据

640?wx_fmt=png

然后初始化一个预测函数,比如就是这个横着的 y = 1x +1,这里的系数就是[ 1 , 1 ],而最终的目标系数是[ 3 , 2 ],那如何移动这条直线呢?

640?wx_fmt=png

这里就涉及到好几个概念:learning rate,loss function,gradient。

移动这条直线的方式会有很多,但如何判断怎么移动是对的呢,就通过loss function 计算MSE 均方差,可以看到预测数据和训练数据的差距,差距越来越小,就证明拟合到位了。

移动的方式有上下移动或者旋转,情况很多,但其实都可以通过gradient一个值来判断,通过改变gradient的值就能计算出loss有多少,就知道这样的调节对不对了。

而learning rate决定的就是调节的幅度,调节的幅度太快反而容易迷失了。

640?wx_fmt=png

最后Jeremy还教大家用matplotlib,去动态演示绘制SGD的过程,本质上就是机器学习的过程,就是如何把这个案例中的直线移动到相符的位置上的过程。

而一开始的y = ax + b的函数,如果再增加一个维度的话:y = a1x1 + a2x2,如果x2 = 1的话,那就是如上的情况,如果x2是个变化的话,那就是更复杂的训练过程,之后会有更详细的讲解。

好了,核心都提炼出来了,但其实第二课讲的远远不止这些,详情请点击阅读原文,查看完整的课程笔记。


相关阅读

产品经理也能动手实践的AI(二)- 做个识别宠物的AI

产品经理也能动手实践的AI(一)- FastAI介绍

人人都能搞懂的AI(四)- AI对社会的影响

640?wx_fmt=png

如果你喜欢思考,别忘记关注+置顶公众号哦!

我是Hawk,8年产品经理,目前专注AI机器学习。

640?wx_fmt=jpeg

好看的人都点了在看 640?wx_fmt=gif
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值