0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习基础知识(4)

CHANBAEK 来源:小小研究生 作者:小小研究生 2023-05-16 17:30 次阅读

神经网络的学习:从训练数据中自动获取最优权重的过程,是使损失函数的值最小的权重参数

机器学习做手写数据识别:从图像中提取特征量,再用机器学习技术学习这些特征量的模式。 图像的特征量通常表示为向量的形式,机器视觉领域常用的特征量包括SIFT、SURF和HOG等。 对转换后的向量使用机器学习中的SVM、KNN等分类器进行学习。

深度学习直接学习图像本身,特征量也是由机器来学习的。 它的优点是对所有问题都可以用同样的流程来解决。

1、训练数据和测试数据

机器学习中,一般将数据分为训练数据和测试数据。 首先使用训练数据进行学习,寻找最优的参数,然后使用测试数据评价模型。 为了正确评价模型的泛化能力,必须划分训练数据和测试数据。 泛化能力是指处理未被观察过的数据的能力。 获得泛化能力是机器学习的最终目标。 仅仅使用一个数据集去学习和评价参数,是无法正确评价的。 可能顺利处理某个数据集,但无法处理其他数据集的情况。 只对某个数据集过度拟合的状态称为过拟合,避免过拟合也是机器学习的一个重要课题。

2、损失函数

神经网络通过损失函数寻找最优权重参数。 损失函数是表示神经网络性能的恶劣程度的指标。

1)均方误差

表示输出与训练数据的不匹配程度,希望得到最小的均方误差。

2)交叉熵误差

实际上只计算对应正确解标签的输出的自然对数。 交叉熵误差的值是由正确解标签所对应的输出结果决定的。 根据自然对数的图像,正确解标签对应的输出越大,交叉熵误差越接近0,当输出为1时,交叉熵误差为0。 使用代码实现时为了避免负无穷大需要添加一个微小值。

以上都是针对单个数据的损失函数,如果要求所有训练数据的损失函数的总和,需要写成下式

MNIST数据集的训练数据有60000个,如果求全部数据的损失函数和不太现实。 因此,需要从全部数据中选出一部分,神经网络的学习也是从训练数据中选出一部分(mini-batch)然后对每批数据进行学习。

从训练数据中随机抽取10笔数据的代码:

train_size=x_train.shape[0]
batch_size=10
batch_mask=np.random.choice(train_size,batch_size)
x_batch=x_train[batch_mask]
t_batch=t_train[batch_mask]

x_train形状为60000*784,所以train_size=60000。 使用np.random.choice()可以从指定的数字中随机选择想要的数字,在60000个数据中随机取10个数字。 后续只需要使用这个mini_batch计算损失函数。

3、mini_batch交叉熵误差的实现

def cross_entropy_error(y,t):
  if y.dim==1:
    t=t.reshape(1,t.size)
    y=y.reshape(1,y.size)
  batch_size=y.shape[0]
  return -np.sum(t*np.log(y+1e-7))/batch_size

当y的维度为1,即求单个数据的交叉熵误差时,需要改变数据的形状变为1*60000,当输入为mini-batch时,需要用batch的个数进行归一化,计算单个数据的平均交叉熵误差。

return -np.sum(np.log(y[np.arange(batch_size),t]+1e-7))/batch_size

如果训练数据是标签形式,改为上述代码。 np.arange(batch_size)会生成一个0到batch_size-1的数组,因为t中的标签是以0-9数字的方式进行存储的,所以y[np.arange(batch_size),t]生成了一个二维数组。

4、为什么要设定损失函数

在神经网络的学习中,寻找最优权重和偏置时,要寻找使损失函数的值尽可能小的参数,需要计算梯度并更新参数。 如果用识别精度作为指标,绝大多数地方的导数都会变为0导致参数无法更新。 因为识别精度的概念是在训练数据中正确识别的数量,稍微改变权重的值识别精度可能无法变化,即使变化也是离散的值。 阶跃函数不能作为激活函数的原因也是这样,对微小变化不敏感,且变化是不连续的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4575

    浏览量

    98773
  • 函数
    +关注

    关注

    3

    文章

    3903

    浏览量

    61310
  • SVM
    SVM
    +关注

    关注

    0

    文章

    154

    浏览量

    32187
  • 机器学习
    +关注

    关注

    66

    文章

    8132

    浏览量

    130577
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119922
收藏 人收藏

    评论

    相关推荐

    怎么学习嵌入式系统基础知识

    如何学习嵌入式系统基础知识
    发表于 02-19 06:28

    FPGA开发经验与技巧_基础知识学习篇(1)

    FLC1301T00 基础知识学习篇希望会对朋友们的学习有帮助!
    发表于 12-16 15:27 3次下载

    PLC基础知识学习,不看后悔

    PLC基础知识学习,不看后悔
    发表于 09-09 08:43 102次下载
    PLC<b class='flag-5'>基础知识</b><b class='flag-5'>学习</b>,不看后悔

    MIT深度学习基础知识 编码器-解码器架构分析

    本文以 7 种架构范例简要介绍深度学习,每种范例均提供 TensorFlow 教程链接。
    的头像 发表于 02-21 15:53 1w次阅读
    MIT<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>基础知识</b> 编码器-解码器架构分析

    微软Xiaowuhu根据自己亲身经历的学习,归纳出来以下教程

    的。所以微软Xiaowuhu根据自己亲身经历的学习轨迹,归纳出了以下教程,可以帮助小白做到真正的从入门到精通。通过以下循序渐进地学习与动手实践,一方面可以帮助读者深刻理解“深度学习”的
    的头像 发表于 07-30 10:40 2763次阅读

    深度学习基础知识深度学习神经网络和学习过程的历史

    好的,大脑是如何表现的?它使用几个无限对(x,y)样本(训练集)训练自己,并且在整个逐步过程中,f(x)函数自动形成自身。它不是由任何人设计的,而是从无休止的试错法提炼机制中产生的。
    的头像 发表于 09-20 15:57 2551次阅读

    神经网络与深度学习基础知识

    神经网络络是有史以来发明的最优美的编程范式之⼀。在传统的编程法中,我们告诉计算机做什么,把⼤问题分成许多⼩的、精确定义的任务,计算机可以很容易地执⾏。相⽐之下,在神经⽹络中,我们不告诉计算机如何解决我们的问题。相反,它从观测数据中学习,找出它⾃⼰的解决问题的⽅法。
    发表于 03-26 09:55 3次下载
    神经网络与<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>基础知识</b>

    了解一下机器学习中的基础知识

    机器学习中的基础知识 demi 在 周四, 03/07/2019 - 09:16 提交 机器学习中涉及到了很多的概念,当然要想了解机器学习的话就需要对这些
    的头像 发表于 03-31 17:08 3532次阅读

    51单片机学习 基础知识总结

    51单片机学习 基础知识总结
    发表于 11-11 19:21 39次下载
    51单片机<b class='flag-5'>学习</b>    <b class='flag-5'>基础知识</b>总结

    单片机基础知识学习笔记

    单片机基础知识学习笔记有关总线1.IIC总线2.SPI总线
    发表于 11-14 16:51 26次下载
    单片机<b class='flag-5'>基础知识</b><b class='flag-5'>学习</b>笔记

    深度学习基础知识分享

    深度学习也为其他科学做出了贡献。用于对象识别的现代卷积网络为神经科学家们提供了可以研究的视觉处理模型(DiCarlo,2013)。深度学习也为处理海量数据以及在科学领域作出有效的预测提
    发表于 09-05 10:30 1次下载

    深度学习基础知识(1)

    首先,我们简单了解什么是感知器,感知器就是单个神经元。
    的头像 发表于 05-16 17:16 701次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>基础知识</b>(1)

    深度学习基础知识(2)

    第0层是输入层,最后一层是输出层,中间是中间层或隐藏层。上图中的网络有3层神经元,实质只有两层有权重,因此称为两层网络。
    的头像 发表于 05-16 17:18 489次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>基础知识</b>(2)

    深度学习基础知识(3)

    多维数组:np.dim()可以获得数组的维数,np.shape()可以获得数组的形状,返回一个元组,对应每一个维度的元素个数。二维数组即矩阵。
    的头像 发表于 05-16 17:21 412次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>基础知识</b>(3)

    深度学习基础知识(5)

    上一节中说到,需要求使损失函数最小的权重和偏置,高中数学中,求函数的极值就是使函数导数为0的点。
    的头像 发表于 05-16 18:24 547次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>基础知识</b>(5)