单一数字评估指标: 我们在平时常用到的模型评估指标是精度(accuracy)和错误率(error rate),错误率是:分类错误的样本数站样本总数的比例,即E=n/m(如果在m个样本中有n个样本分类错误),那么1-a/m就是精度.除此之外,还会有查准率和查全率,下面举例解释. 按照周志华<机器学习>中的例子,以西瓜问题为例. 错误率:有多少比例的西瓜被判断错误: 查准率(precision):算法挑出来的西瓜中有多少比例是好西瓜: 查全率(recall):所有的好西瓜中有多少比例被算法跳了出来…
总结一下就是在提升偏差的方面(即贝叶斯最优误差和训练误差的差距) 1.尝试更大更深的网络 2.加入优化算法比如前面提过的momentum.RMSprop.Adam等 3.使用别的神经网络架构比如RNN/CNN等等 在提升方差的方面(即训练误差和测试误差的差距) 1.加大训练集的样本数量 2.正则化操作,如L2.dropout.Data Augmentatio数据扩增.early stop等 3.使用别的神经网络架构比如RNN/CNN等等…
从某种角度来说,已知的人类最佳表现其实可以被当做贝叶斯最优错误,对于医学图像分类可以参见下图中的例子. 那么如何理解超过人类表现,在哪些领域机器已经做到了超越人类呢?…
可避免偏差: 总结一下就是当贝叶斯最优误差接近于训练误差的时候,比如下面的例子B,我们不会说我们的训练误差是8%,我们会说我可避免偏差是0.5%.…
结合吴恩达老师前面的讲解,可以得出一个结论: 在机器学习的早期阶段,传统的机器学习算法在没有赶超人类能力的时候,很难比较这些经典算法的好坏.也许在不同的数据场景下,不同的ML算法有着不同的表现. 但是在接近人类表现,甚至超越人类表现逼近bayes optimal error的时候,深度学习就展现了其优越的性能和巨大的潜力,同样如果把横轴time换做数据量,其实可以得出一样的结论,因为时间的发展也是数据规模的发展.…
 train/dev/test的划分 我们在前面的博文中已经提到了train/dev/test的相关做法.比如不能将dev和test混为一谈.同时要保证数据集的同分布等. 现在在train/dev/test的划分中,我们依然要旧事重提关于same distribution即同分布的概念. 假设我们现在有一种商品来自8个国家,如果我们将四个国家作为train和dev,将另外四个国家作为test,这种做法显然是错的. 因为我们建立的模型的靶点是为了逼近前四个国家的结果,但是在真正测试的时候我们移动了…
orthogonalization 正交化的概念就是指,将你可以调整的参数设置在不同的正交的维度上,调整其中一个参数,不会或几乎不会影响其他维度上的参数变化,这样在机器学习项目中,可以让你更容易更快速地将参数调整到一个比较好的数值. 打个比方,当你开车的时候假设有一个按钮1:0.3angle-0.8speed 还有一个按钮2:2angle+0.9speed 那么理论上来说通过调整这两个按钮,可以得到你想要的角度和速度,但是在实际操作中我们肯定希望角度和速度的控制方式是单独且互不影响的,这就是正交…
机器学习策略 ML strategy 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 什么是ML策略 机器学习策略简介 情景模拟 假设你正在训练一个分类器,你的系统已经达到了90%准确率,但是对于你的应用程序来说还不够好,此时你有很多的想法去继续改善你的系统 收集更多训练数据 训练集的多样性不够,收集更多的具有多样性的实验数据和更多样化的反例集. 使用梯度下降法训练更长的时间 尝试一个不同的优化算法,例如Adam优化算法. 尝试更大的神经网络或者更小的神经网络 尝试dropout…
Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SSH Twsited网络框架 引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回顾下 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是…
操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数…
python入门基础 声明:以后python代码未注明情况下,默认使用python3.x版本 1.python代码基础:print     print('hello,python')   1.1pythong内部执行原理:      2.解释器 python 中.py的文件需要使用python的解释器执行并生成.pyc的字节码文件,在第二次执行.py文件时会直接执行已经存在的.pyc文件,如果.py文件改变,解释器会重新执行.py文件从而更新.pyc文件. 在linux中如果执行python 的…
本节主要内容:memcache&redis.RabbitMQ.twisted框架 1. memcache&redis 1.1 memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通…
一.什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程. 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程. 车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一个流水线. 流水线的工作需要电源,电源就相当于cpu  所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的…
注意:以下方法不适合在登录时开启,只能是登录后开启.而且我经过测试之后会自动暗下去,但是不影响功能使用.这个是BUG的修复方法:https://askubuntu.com/questions/509029/numlock-light-turns-off-when-you-switch-language-with-super-space 1.安装numlockx sudo apt-get install numlockx 2.编辑rc.local sudo vim /etc/rc.local 在e…
1.原题: https://leetcode.com/problems/subtract-the-product-and-sum-of-digits-of-an-integer/ Given an integer number n, return the difference between the product of its digits and the sum of its digits. 翻译:给定一个数字n,返回乘积和总合的差. 理论上的输入输出: Input: n = 234 Out…
本次作业:Andrew Ng的CNN的搭建卷积神经网络模型以及应用(1&2)作业目录参考这位博主的整理:https://blog.csdn.net/u013733326/article/details/79827273 今天要实现的是识别手势姿势表达的数字 我的Git传送门:https://github.com/VVV-LHY/deeplearning.ai/tree/master/CNN/RecognizeGestureNum 本来是接着day17用了numpy编了一个卷积层和池化层的前向传播…
以上是一个识别手写数字的示例 在这个示例中使用了两个卷积-池化层,三个全连接层和最后的softmax输出层 一般而言,CNN的构成就是由数个卷积层紧跟池化层再加上数个全连接层和输出层来构建网络. 在上述网络中可以看到一个有关参数的现象如下图: 随着卷积网络层数的增加,可以看到有关图片数据的height和weight都在减小,而信道channel在增加. 伴随着这种操作,激活层的大小也在减小.但是卷积层需要的参数量在增多(f x f + 1) x c,f为filter的大小,c为channel的数…
来看上图的简单CNN: 从39x39x3的原始图像 不填充且步长为1的情况下经过3x3的10个filter卷积后 得到了 37x37x10的数据 不填充且步长为2的情况下经过5x5的20个filter卷积后 得到了 17x17x20的数据 不填充且步长为2的情况下经过5x5的40个filter卷积后 得到了 7x7x40的最终结果 将7x7x40的卷积层全部展开作为输入特征,建立一个输入层单元数为1960的神经网络即可 卷积神经网络常见的结构: 1.Conv卷积层如上图所见 2.Pool池化层…
和单层图像的卷积类似,只需要对每一个filter构成的三层立方体上的每一个数字与原图像对应位置的数字相乘相加求和即可. 在这个时候可以分别设置filter的R.G.B三层,可以同时检测纵向或横向边缘,也可以只检测某一通道的,只需要对其他通道的filter置为0即可. 那么如果要使用filter同时对纵向.横向或者其他角度的边缘进行检测该怎么办呢? Multiple filter: 对于同时采用多个filter来检测不同特征的时候,只需要将多个filter的结果堆叠起来输出即可,如上图所示. 神经…
在11.2中,我们提到了一种数据划分的方法,那么怎么衡量这种数据划分方法中的误差呢? 来看一个例子:有20w条各种领域的语音识别数据,2w条汽车语音定位数据 train+dev+test,其中train是20w原始数据+1w汽车数据,dev和test各自都是5k条汽车数据 显然地,train和dev/test此时是不同分布的,如果出现以下情况 基准情况: train error:1% dev error:10% 我们不知道如何评估这种误差,因为train和dev是不同分布的,存在可能模型本来很好…
Error | 误差 Bias | 偏差 – 衡量准确性 Variance | 方差 – 衡量稳定性 首先我们通常在实际操作中会直接用错误率或者与之对应的准确率来衡量一个模型的好坏,但是更加准确的做法是误差衡量时综合考虑偏差和方差的共同作用. 所谓偏差Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度.Variance反映的是模型每一次输出结果与模型输出期望值之间的误差,即模型的稳定性. 举个例子,对于一个二分类问题,比如测试图片是不是猫,是猫的话就是1,不是猫就是2. 现…
两个重点: 一.举个例子,如果建立一个图像识别的数据集,你的训练集和你的训练验证集是从网上爬下来的(也就是说这些图片的大小.像素.后期制作都可能很精美),你真正的测试集是用户的手机上传(不同的手机.环境.光线.时间等等会造成不同的效果) 这两个集合必定不是同分布的,虽然在transfer learning中我们鼓励这种研究方式,但是在单个模型的训练中,不管你的模型建立的多么好,从这个数据集建立开始的那一刻起就注定了你的结果不会很好.所以,在建立自己的数据集时,必须保证同分布的条件,当然这很困难,…
因为要上手深度学习的原因,购置了一台RTX2080TI+ubuntu18.04的机器 例行两条命令 sudo apt-get update sudo apt-get upgrade 开启巨坑第一天,以前只在虚拟机上用过ubuntu,今天开箱之后因为用户名和主机名的问题我重装了ubuntu,问题一,参考了网上各种创建用户和主机并删除以前用户组的方法,改了好多系统文件结果gg,卡黑屏,没办法只能重装. 重装后遇见的问题二,nvidia驱动问题,因为N卡厂商的闭源行为和linux闹得不是很愉快,因此以…
基础部分先告一段落,今天开始学习函数. 一.函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数         -- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名        => 通过名字就可以找到工具 => 使用工具来解决问题 # 函数的优点: # 1. 避免代码的冗余 # 2. 让程序代码结构更加清晰 # 3. 让代码具有复用性,便于维护 函数的四部分: 1. 函数名:使用该函数的依据 2. 函数体:完成功能的代码块…
开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如果我们的数据集很小,我们可以采用对原框架和权重都保持不变,只更改最后的output层实现迁移. 2.如果我们的数据集大小中等,可以尝试冻结原框架的前面多层,对其后的层数进行更改. 3.如果我们的数据集很大,可以在原架构上尝试新的训练,不采用预训练的权重,还可以自行更改模型,做更多的尝试. CNN中的…
1.经典的CNN LeNet-5 1998的CNN鼻祖 以前用的sigmoid和tanh 下图给的是relu和softmax AlexNet ImageNet2012的冠军 VGG-16 ImageNet2014的冠军和亚军 2.残差神经网络 imageNet2015冠军和2016的亚军 2017的冠军SENet也算是res的变种 3.GoogleNet即inceptionNet 主要贡献在1x1卷积的channel缩放上 然后用了很多same conv组成了inception结构 有V1V2V…
网上对np.pad的解释很玄乎,举的例子也不够直观,看了更晕了,对于CNN的填充请参考下面就够用了: np.pad的参数依次是目标数组,多增加的维数可以理解为一张图的前后左右增加几圈,设置为'constant'之后为连续填充相同的值,默认为(0, 0),可以设置为constant_values = (x, y)…
2019-10-24-23:21:17 目录 1.抽象的方法 2.抽象类 3.抽象类和抽象方法的使用 4.抽象类的注意事项 5.案例代码 1.抽象的方法 What:如果父类当中的方法不确定如何进行{}方法体实现,那么这就是一个抽象方法. 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束. 抽象类:抽象方法所在的类,必须是抽象类才行.在class之前写上abstract即可. 2.抽象类 抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法.类即使不包含抽象方法,也可以…
感谢吴恩达老师的公开课,以下图片均来自于吴恩达老师的公开课课件 为什么要进行卷积操作? 我们通过前几天的实验已经做了64*64大小的猫图片的识别. 在普通的神经网络上我们在输入层上输入的数据X的维数为(64*64*3, m) 假设第二层的节点数为1000,在全连接网络下,则W的维数为(1000, 64*64*3). 这看起来是可以操作的,但是实际情况下的图片是更高清的,比如现在的手机已经动辄2400万像素. 在这种情况下让内存来处理很多W权重矩阵是不现实的,因此卷积神经网络就成为了计算机视觉领域…