激活函数

神经网络剪枝,知识蒸馏,以及模型优化设计

痞子三分冷 提交于 2020-08-05 13:06:20
一.神经网络压缩 在如今人工智能的浪潮之下,深度学习在不少领域都取得了不错的成果。但是目前在边缘计算,物联网设备上的算力相比于我们的台式计算机还不太充足,我们在计算机上用于拟合的神经网络参数过多,不太适合运行在算力较弱的设备上,比如无人机,手机,平板电脑,自动驾驶汽车等等。因此我们需要将在计算机上训练好的神经网络通过某种技巧将其进行压缩,减少模型的参数,这样训练好的模型就可以迅速在这些边缘计算的设备上部署,同时达到和计算机上训练模型几乎一致的效果。比如我们常用的图像分类的模型VGG,通过改良后的MobileNet,计算量减少了10倍,输出的准确度结果甚至超越了AlexNet,准确率比Google InceptionNet也只少了0.7个百分点。那么我们有什么方法进行神经网络的压缩呢?目前比较常用的则是神经网络的剪枝,知识蒸馏,以及模型优化设计者三个方法。 二.神经网络剪枝 其实我们拟合的神经网络,很多网络的参数都过于多了,有些神经元在对结果进行的预测的时候并没有什么用,甚至是具有负面的作用。因此我们需要将其“ 拆除 ”。 拆除网络当中某些参数的方法如下: 1.剪掉权重weight约等于0的weight,让两个神经元之间失去连接 2.查看某个神经元经过activation之后的输出是否接近于零,如果接近于零,则剪掉这个神经元 3.在修剪完整个网络之后,识别的准确度肯定会下降

第一次作业:深度学习基础

旧巷老猫 提交于 2020-08-05 01:06:13
Part Ⅰ 视频学习心得及问题总结 1.绪论 1.1从专家系统到机器学习 1.1.1人工智能的发展经历了三个阶段:推理期、知识期、学习期。 知识工程/专家系统——根据专家定义的知识与经验,进行推理和判断,从而模拟人类专家的决策过程来解决问题。 机器学习——从数据中自动的提取出知识或模式。 1.1.2专家系统vs机器学习 专家系统 机器学习 基于手工设计规则建立专家系统 基于数据自动学习 结果容易解释 减少人工繁杂工作,但结果可能不易解释 系统构建费时费力 提高信息处理的效率,且准确率较高 依赖于专家主观经验,难以保证一致性和准确性 来源于真实数据,减少人工规则主观性,可信度高 1.2从传统机器学习到深度学习 1.2.1 传统机器学习 在实际应用中,特征比分类器更重要。原始数据经过数据预处理、特征提取、特征选择,最后经过分类预测识别得到最后的结果。在传统的机器学习中,人工会去手动的设计特征。 1.2.2 深度学习 在深度学习中,首先选择深度学习的模型以及模型的参数,然后把收集到的数据和选择好的模型交给计算机,让计算机去优化这个深度模型中的参数。在这个过程中,人工参与的部分比较少,可能只是在前期收集数据和选择深度模型有一定程度的参与。 1.3深度学习的能与不能 了解深度学习的能与不能,对我们拓展深度学习的应用的研究具有比较深刻的意义。 1.3.1 深度学习之能——视觉与语义结合

大白话5分钟带你走进人工智能-第39节神经网络之DNN网络的layer功能实现

∥☆過路亽.° 提交于 2020-08-05 00:17:17
目录 一、背景前言 二、DNN概述 三、手写DNN实现逻辑 四、调用Tensorflow代码构建DNN 五、模型保存和使用 六、提升准确率方案 七、引申和总结--零初始化,梯度消失和反向传播 一、背景前言 我们先看下SoftMax的代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名: 12_Softmax_regression.py from examples.tutorials.mnist import input_data import tensorflow as tf # mn.SOURCE_URL = "http://yann.lecun.com/exdb/mnist/" my_mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)#从本地路径加载进来 # The MNIST data is split into three parts: # 55,000 data points of training data (mnist.train)#训练集图片 # 10,000 points of test data (mnist.test), and#测试集图片 # 5,000 points of validation data (mnist

CNN笔记:通俗理解卷积神经网络

做~自己de王妃 提交于 2020-08-04 13:39:43
通俗理解卷积神经网络(cs231n与5月dl班课程笔记) 1 前言 2012年我在北京组织过8期machine learning读书会,那时“机器学习”非常火,很多人都对其抱有巨大的热情。当我2013年再次来到北京时,有一个词似乎比“机器学习”更火,那就是“深度学习”。 本博客内写过一些机器学习相关的文章,但上一篇技术文章“LDA主题模型”还是写于2014年11月份,毕竟自2015年开始创业做在线教育后,太多的杂事、琐碎事,让我一直想再写点技术性文章但每每恨时间抽不开。然由于公司在不断开机器学习、深度学习等相关的在线课程,耳濡目染中,总会顺带着学习学习。 我虽不参与讲任何课程(我所在公司“ 七月在线 ”的所有在线课程都是由目前讲师团队的100多位讲师讲),但依然可以用最最小白的方式 把一些初看复杂的东西抽丝剥茧的通俗写出来。这算重写技术博客的价值所在。 在dl中,有一个很重要的概念,就是卷积神经网络CNN,基本是入门dl必须搞懂的东西。本文基本根据斯坦福的机器学习公开课、cs231n、与七月在线寒小阳讲的5月 dl班 所写,是一篇课程笔记。 一开始本文只是想重点讲下CNN中的卷积操作具体是怎么计算怎么操作的,但后面不断补充,包括增加不少自己的理解,故写成了关于卷积神经网络的通俗导论性的文章。有何问题,欢迎不吝指正。 2 人工神经网络 2.1 神经元

程序员的函数

江枫思渺然 提交于 2020-08-04 12:44:59
函数是一个太大的题目。我们仅选择几个和程序员直接相关的点来说一下: 函数图象 其实,我们在初中就已经开始学习了函数了。还记得我们当时学过哪些函数吗? 多项式函数 一次函数 二次函数 …… 反比例函数 指数函数 对数函数 三角函数 …… 还记得它们的图像吗?(下图是一些例子) 给定函数画出其对应的图像——这一点非常重要! 在对函数求导数或者微分的过程中,如果能够知道原函数的图像,对照图像去理解各点的导数、微分、梯度等概念,比纯粹靠函数式理解要直观得多。 比如:深度学习中常见的激活函数,为什么要有那么多种呢?因为各自的性质不同,因此用处也不同啊。 为什么性质不同呢?先不用计算,看看它们的图象,往往就能有些体会了: 函数的定义 中学期间我们学了那么那么多函数,总体上感觉,函数就是:一个数学式子,里面有 x x ,最后等于一个 y y 。 但其实,这只是函数的一种表现形式。 真正的 函数定义 是:在数学里,函数是两个集合之间的一个映射,或者说是一种对应关系——输入值集合中的每个元素都能对应到唯一的一个输出值集合中的元素(反之未必)。 用图形描述起来,是这样的: 一个函数就好像一个黑盒,或者一部机器,我们把输入值当作原料倒进去,经过内部的一番映射过程,就会产生出输出值来。 我们习惯性地用 x x 表示输入值,而用 y y 来代表输出值,而把这个“机器”把 x x “加工”成 y y

神经网络简易教程

别等时光非礼了梦想. 提交于 2020-07-27 15:11:17
作者|Renu Khandelwal 编译|VK 来源|Medium 在这篇文章中,我们将了解神经网络的基础知识。 这个博客的先决条件是对机器学习的基本理解,如果你尝试过一些机器学习算法,那就更好了。 首先简单介绍一下人工神经网络,也叫ANN。 很多机器学习算法的灵感来自大自然,而最大的灵感来自我们的大脑,我们如何思考、学习和做决定。 有趣的是,当我们触摸到热的东西时,我们身体里的神经元将信号传递给大脑的。然后,大脑产生冲动,从热的区域撤退。我们根据经验接受了训练。根据我们的经验,我们开始做出更好的决定。 使用同样的类比,当我们向神经网络发送一个输入(触摸热物质),然后根据学习(先前的经验),我们产生一个输出(从热区域退出)。在未来,当我们得到类似的信号(接触热表面),我们可以预测输出(从热区退出)。 假设我们输入了诸如温度、风速、能见度、湿度等信息,以预测未来的天气状况——下雨、多云还是晴天。 这可以表示为如下所示。 让我们用神经网络来表示它并理解神经网络的组成部分。 神经网络接收输入,通过使用激活函数改变状态来转换输入信号,从而产生输出。 输出将根据接收到的输入、强度(如果信号由权值表示)和应用于输入参数和权值的激活而改变。 神经网络与我们神经系统中的神经元非常相似。 x1、x2、…xn是神经元向树突的输入信号,在神经元的轴突末端会发生状态改变,产生输出y1、y2、…yn。

(2020.6.22)SIREN:用sin作为NN的激活函数

本小妞迷上赌 提交于 2020-07-24 23:10:39
今天读到了一篇论文,感觉很厉害:2006.09661,这篇文章提出了用sine作为激活函数,可以让NN的拟合能力更强,而且具有一些额外的很厉害的性质。 尝试不同的激活函数其实很多人做过,估计使用sin也很多人尝试过,但是估计效果不好就放弃了,但是这里作者提出了只需要用特定的初始化方法,效果飞云之上。 这种方式得到的一个很厉害的性质就是SIREN的导数还是SIREN。所以就可以不用拟合数据本身,拟合数据的导数就能拟合数据。 这里其实让我联想到BERT里面的position embedding,就用到了sin函数,人生真是奇妙,难道BERT效果拔群,关键是采用了周期的位置向量? 来源: oschina 链接: https://my.oschina.net/u/4409653/blog/4325617

写给程序员的机器学习入门 (四)

南笙酒味 提交于 2020-05-08 15:39:22
这篇将会着重介绍使用 pytorch 进行机器学习训练过程中的一些常见技巧,掌握它们可以让你事半功倍。 使用的代码大部分会基于上一篇最后一个例子,即根据码农条件预测工资🙀,如果你没看上一篇请点击 这里 查看。 保存和读取模型状态 在 pytorch 中各种操作都是围绕 tensor 对象来的,模型的参数也是 tensor,如果我们把训练好的 tensor 保存到硬盘然后下次再从硬盘读取就可以直接使用了。 我们先来看看如何保存单个 tensor,以下代码运行在 python 的 REPL 中: # 引用 pytorch >>> import torch # 新建一个 tensor 对象 >>> a = torch.tensor([1, 2, 3], dtype=torch.float) # 保存 tensor 到文件 1.pt >>> torch.save(a, "1.pt") # 从文件 1.pt 读取 tensor >>> b = torch.load("1.pt") >>> b tensor([1., 2., 3.]) torch.save 保存 tensor 的时候会使用 python 的 pickle 格式,这个格式保证在不同的 python 版本间兼容,但不支持压缩内容,所以如果 tensor 非常大保存的文件将会占用很多空间,我们可以在保存前压缩

写给程序员的机器学习入门 (四)

对着背影说爱祢 提交于 2020-05-08 14:57:00
这篇将会着重介绍使用 pytorch 进行机器学习训练过程中的一些常见技巧,掌握它们可以让你事半功倍。 使用的代码大部分会基于上一篇最后一个例子,即根据码农条件预测工资🙀,如果你没看上一篇请点击 这里 查看。 保存和读取模型状态 在 pytorch 中各种操作都是围绕 tensor 对象来的,模型的参数也是 tensor,如果我们把训练好的 tensor 保存到硬盘然后下次再从硬盘读取就可以直接使用了。 我们先来看看如何保存单个 tensor,以下代码运行在 python 的 REPL 中: # 引用 pytorch >>> import torch # 新建一个 tensor 对象 >>> a = torch.tensor([1, 2, 3], dtype=torch.float) # 保存 tensor 到文件 1.pt >>> torch.save(a, "1.pt") # 从文件 1.pt 读取 tensor >>> b = torch.load("1.pt") >>> b tensor([1., 2., 3.]) torch.save 保存 tensor 的时候会使用 python 的 pickle 格式,这个格式保证在不同的 python 版本间兼容,但不支持压缩内容,所以如果 tensor 非常大保存的文件将会占用很多空间,我们可以在保存前压缩

华人博士卷积网络可视化项目火了:点鼠标就能看懂的扫盲神器

大兔子大兔子 提交于 2020-05-08 14:10:52
  机器之心报道    参与:Racoon、蛋酱、张倩    终于等到了这个交互式学习神器,把 CNN 的工作过程画得明明白白,帮助萌新轻松入门。      什么是 CNN?Convolutional Neural Network,中文译为「卷积神经网络」。   这个常见但有些深奥的词汇,只可意会,不能言传。如果打开教材,会看到这样一些解释:    卷积层是深度神经网络在处理图像时十分常用的一种层。当一个深度神经网络以卷积层为主体时,我们也称之为卷积神经网络。 神经网络中的卷积层就是用卷积运算对原始图像或者上一层的特征进行变换的层……   说得很有道理,但如果将一张图片作为输入,这张图片究竟会在卷积神经网络中经历什么?这可真是太考验想象力了。   最近,来自佐治亚理工学院与俄勒冈州立大学的研究者们,考虑到初学者和非专业人士的学习痛点,合作开发出了一款卷积神经网络交互式可视化工具——CNN 解释器(CNN Explainer)。这个解释器展示了一个 10 层的神经网络,包含卷积层、激活函数、池化层等多个 CNN 初学者无论如何也绕不开的概念。      这个工具到底把 CNN 展示得有多明白?简单来说,项目作者已经给你做好了一个可以交互的界面,各种层、激活函数都铺在眼前。你只需要打开浏览器加载出这个界面,移动鼠标点来点去就可以了。      CNN Explainer 使用