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

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

3天内不再提示

神经网络中的损失函数层和Optimizers图文解读

lviY_AI_shequ 2017-11-30 16:09 次阅读

对于许多机器学习算法来说,最终要解决的问题往往是最小化一个函数,我们通常称这个函数叫损失函数。在神经网络里面同样如此,损失函数层(CostLayer)和Optimizers因而应运而生(……),其中:

CostLayer 用于得到损失

Optimizers 用于最小化这个损失

需要一提的是,在神经网络里面,可以这样来理解损失:它是输入 x 经过前传算法后得到的输出和真实标签y 之间的差距。如何定义这个差距以及如何缩小这个差距会牵扯到相当多的数学知识,我们这里就只讲实现,数学层面的内容(有时间的话)(也就是说基本没可能)(喂)会在数学系列里面说明。感谢万能的 tensorflow,它贴心地帮我们定义好了损失函数和 Optimizers,所以我们只要封装它们就好了

CostLayer

先定义一个基类:

相当于我们把 Layer 的激活函数“偷换”成了损失函数。calculate 函数用于直接计算损失,它只在复杂模型中分析模型表现时用到,可以暂时不管

再定义实际应用的 CostLayer,我们以应用最广泛的 CrossEntropy 为例:

这里面用的正是 tensorflow 的内置函数

Optimizers

这一部分的封装做得更加没有营养,大部分代码都仅仅是为了和我自己造的轮子的接口 一致。最关键的部分只有两行:

其中 self._opt 是 tensorflow 帮我们定义好的 Optimizers 中的一个,它的作用也很简单粗暴:更新 session 中的各个变量以使得损失 x 向最小值迈进

以上,CostLayer 和 Optimizers 的定义、功能和实现就说得差不多了;再加上前几章,一个完整的、较朴素的神经网络就完全做好了,它支持如下功能:

自定义激活函数

任意堆叠 Layer

通过循环来堆叠重复的结构

通过准确率来评估模型的好坏

这不算是一个很好的模型、但已经具有了基本的雏形,走到这一步可以算是告一段落。接下来如果要拓展的话,大致流程会如下:

在训练过程中记录下当前训练的结果、从而画出类似这样的曲线:

让模型支持比较大规模数据的训练,它包括几个需要改进的地方:

我们目前没有把数据分割成一个个小 batch 来训练我们的模型;但当数据量大起来的时候、这种处理是不可或缺的

我们目前做预测时是将整个数据扔给模型让它做前传算法的。数据量比较大时,这样做会引发内存不足的问题,为此我们需要分批前传并在最后做一个整合

我们目前没有进行交叉验证,这使我们的模型比较容易过拟合。虽然其实让用户自己去划分数据也可以,但留一个接口是好的习惯

最后也是最重要的,当然就是把我们的模型扩展成一个支持 CNN 模型了。这是一个巨坑、且容我慢慢来填……

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

    关注

    42

    文章

    4572

    浏览量

    98746

原文标题:从零开始学人工智能(6)--Python · 神经网络(五)· Cost & Optimizer

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MATLAB神经网络工具箱函数

    MATLAB神经网络工具箱函数说明:本文档中所列出的函数适用于MATLAB5.3以上版本,为了简明起见,只列出了函数名,若需要进一步的说明,请参阅MATLAB的帮助文档。1.
    发表于 09-22 16:10

    神经网络教程(李亚非)

    神经元  第3章 EBP网络(反向传播算法)  3.1 含隐的前馈网络的学习规则  3.2 Sigmoid激发函数下的BP算法  3.3
    发表于 03-20 11:32

    从AlexNet到MobileNet,带你入门深度神经网络

    的深度神经网络运用的方法。AlexNet在研发的时候,使用的GTX580仅有3GB的显存,所以创造性的把模型拆解在两张显卡,架构如下:1.第一是卷积,针对224x224x3的输入
    发表于 05-08 15:57

    【PYNQ-Z2试用体验】神经网络基础知识

    超过阈值,输出就一跃而起。但我们一般用S函数作为激活函数。如下图:图2 该函数相比阶越函数更加接近现实。神经网络原理如图所示是一个具有两
    发表于 03-03 22:10

    【案例分享】基于BP算法的前馈神经网络

    传播的,不会回流),区别于循环神经网络RNN。BP算法(Back Propagation):误差反向传播算法,用于更新网络的权重。BP神经网络思想:表面上:1. 数据信息的前向传播,
    发表于 07-21 04:00

    【案例分享】ART神经网络与SOM神经网络

    的拓扑结构,即将高位空间中相似的样本点映射到网络输出的邻近神经元。SOM神经网络的输出
    发表于 07-21 04:30

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入:根据现有数据获取输入的
    发表于 07-12 08:02

    matlab实现神经网络 精选资料分享

    神经神经网络,对于神经网络的实现是如何一直没有具体实现一下:现看到一个简单的神经网络模型用于训练的输入数据:对应的输出数据:我们这里设置:1:节点个数设置:输入
    发表于 08-18 07:25

    神经网络移植到STM32的方法

    神经网络移植到STM32最近在做的一个项目需要用到网络进行拟合,并且将拟合得到的结果用作控制,就在想能不能直接在单片机上做神经网络计算,这样就可以实时计算,不依赖于上位机。所以要解决的主要是两个
    发表于 01-11 06:20

    神经网络在训练时常用的一些损失函数介绍

    神经网络在训练时的优化首先是对模型的当前状态进行误差估计,然后为了减少下一次评估的误差,需要使用一个能够表示错误函数对权重进行更新,这个函数被称为损失
    发表于 10-20 17:14

    卷积神经网络简介:什么是机器学习?

    列文章将只关注卷积神经网络 (CNN)。CNN的主要应用领域是输入数据包含的对象的模式识别和分类。CNN是一种用于深度学习的人工神经网络。此类网络由一个输入
    发表于 02-23 20:11

    图文详解:神经网络的激活函数

    什么是神经网络激活函数?激活函数有助于决定我们是否需要激活神经元。如果我们需要发射一个神经元那么信号的强度是多少。激活
    的头像 发表于 07-05 11:21 3425次阅读
    <b class='flag-5'>图文</b>详解:<b class='flag-5'>神经网络</b>的激活<b class='flag-5'>函数</b>

    神经网络面临的问题和挑战

    神经网络从感知机发展到多层前馈神经网络网络变得越来越复杂。如上一篇 机器学习中的函数(2)- 多层前馈网络巧解“异或”问题,
    的头像 发表于 11-01 11:54 2677次阅读

    什么是神经网络应用-2

    本项目在之前项目分类模型基础上神经网络应用(一)进一步拓展神经网络应用,相比之前本项目增加了新的知识点,比如正则化,softmax函数和交叉熵损失
    的头像 发表于 02-24 15:43 1395次阅读
    什么是<b class='flag-5'>神经网络</b>应用-2

    训练深度学习神经网络的常用5个损失函数

    被称为损失函数损失函数的选择与神经网络模型从示例中学习的特定预测建模问题(例如分类或回归)有关。在本文中我们将介绍常用的一些
    的头像 发表于 10-19 11:17 531次阅读
    训练深度学习<b class='flag-5'>神经网络</b>的常用5个<b class='flag-5'>损失</b><b class='flag-5'>函数</b>