【younger】TF学习笔记整理


#1

加入学习小组的第一天,希望能学到很多深度学习和python的知识


#2

加油!一起和大家努力~


#3

1、机器学习中,监督学习 or 非监督学习概念区分,应用场景调研? 监督学习:指给定数据(作为输入)及其标签(作为输出),通过训练、优化得到最优模型从而当有一个新的数据输入时计算机自己就能判断出输出应该为什么; 无监督学习:同样是给定数据但是没有标签,但是这些数据往往有明显的结构,通过无监督学习算法可以将其聚类。 2、做机器学习项目,有哪些环节? 理解实际问题从而将其抽象为机器学习能够处理的数学问题->获取、观察数据->数据清洗、处理->建模、训练、优化->测试->模型融合 3、深度学习,目前有哪些应用领域? 深度学习主要应用在图像识别、语音识别和自然语言处理(NLP) 4、数据预处理,需要注意哪些? ①在处理数据之前,首先要观察数据并获知其特性。 ②去均值只是针对训练集,而不是整个样本数据

5、tensorflow运行原理,架构有哪些核心点?(明天再看) TensorFlow是用数据流图(data flow graphs)技术来进行数值计算的。TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤被描述成一个图,一个 op 获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor…每个 Tensor 是一个类型化的多维数组. 例如, 你可以将一小组图像集表示为一个四维浮点数数组, 这四个维度分别是 [batch, height, width, channels]. 在执行阶段, 使用会话(Session) 执行执行图中的 op.会话(Session) 将图的 op 分发到诸如 CPU 或 GPU 之类的设备上, 同时提供执行 op 的方法. 这些方法执行后, 将产生的 tensor 返回. 在 Python 语言中, 返回的 tensor 是 numpy ndarray 对象. 总之,构图—Session—>输出 ①使用图 (graph) 来表示计算任务. ②在被称之为会话 (Session) 的上下文 (context) 中执行图. ③使用 tensor 表示数据. ④通过 变量 (Variable) 维护状态. ⑤使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据. tensorflow结构的核心点:会话(session), 图(graph),节点(operation),边(tensor) 附上Tensorflow数学运算的帖子> http://blog.csdn.net/mzpmzk/article/details/77337851


#4

被禁了?是不是被禁了?


#5

我到公司帮你操作一下~


#6

我这边看到没有被禁止,有显示什么错误,发到tf小组里?


#7

好的 我发群里给你看下


#8

李宏毅机器学习介绍笔记 背景知识: 人工智慧(AI):1950年提出,是人类长远以来的目标:希望机器能够跟人类一样聪明。 怎么做到AI?到1980年,出现了机器学习,即使机器有学习的能力,成为实现AI的手段 —>到2010年,出现深度学习,机器学习的一种。 人学习的方式有:先天本能和后天学习。 人给机器设定天生本能:永远无法超越创造者—>机器学习的发展对小规模企业有利,不需要花钱请人做各式各样的规则,只需要一个data就可以了。 具体介绍: 什么是机器学习: 使机器有这样的能力:根据提供的资料(Data),寻找出一个function。 怎么找出一个function? 首先要准备(a set of function)一个function集(f1,f2,…),即Model,然后由训练资料(training data)判断哪个function好,在set中挑出最好的function,记为f*,然后输入一个新的输入得到要输出的东西。
监督学习: 回归问题、分类问题 回归:输出是数值 如预测PM2.5

分类:输出一个选项,有二元分类和多元分类
二元分类:如邮件分类 多元分类:如文件分类 Model种类:线性模型,非线性模型(深度学习(function很复杂,所以可以解决很复杂的识别,如图形识别,下围棋等)、SVM、决策树、K-NN逼近法)

通常称output为label(人工标注),需要大量数据,如何减小数据的需求? ①半监督学习:有少量label,有大堆的没label的数据,它们对学习也有帮助 ②迁移学习(Transfer Learning):有大量有label和没label的数据,但是有一大推不相干的数据,它们对学习也有帮助 ③非监督学习:让机器无师自通,即在没有label的情况下机器可以学习到哪种程度。如让机器看一大堆文章,但是没有label,它要怎么学习? 又如让机器看大量的动物,怎么自己学会识别?
结构学习:输出一个有结构性的东西 强化学习:在监督学习中,我们会告诉机器正确答案,在强化学习中,不告诉正确答案,只有一个分数,告诉它好还是不好,更符合我们人类学习的方式。
其中,尽管强化学习很强大,如果可以用监督学习做,不用强化学习做


#9

李飞飞第一课:深度学习历史

  • 如今我们处于视觉时代:互联网上超过85%的信息都是像素形式

  • 信息爆炸的原因:部分是因为我们有互联网作为信息的载体,另一部分原因是因为传感器(比如相机,每个手机都有1-3个摄像头,传感器的数量甚至比人还多)

  • 但是视觉信息(像素信息)是最难被利用的信息,称“互联网中的暗物质”,因为它们都非常难被检测和观察到,我们可以通过数学模型来推断这些暗物质的存在。

  • 非常大量的数据,暗黑物质—>计算机视觉:视觉数据的研究

历史:

  • 深度学习是为了解决识别问题,但是识别问题反过来促进深度学习进化。

  • 从进化爆炸:动物从没有眼睛时等着食物到嘴里到有了眼睛自己去主动搜索和获取食物从而推动了生物进化。也正是视觉带来了对世界的认识和感知。

  • 历史上推动深度学习的里程碑主要有以下两个:

①猫实验:这个实验发现我们大脑对视觉信息的处理是基于边缘和形状的,视觉处理流程从一些简单的形状开始,而不是整体的老鼠或者猫。

②David Marr:视觉是分层的,可以建立一个分层的模型,第一层是形状,2.5D,第二层将2D的图像信息调整为包含真实世界的3D信息,这个步骤会认识到层次信息,第三层:整合成3D(世界是3D的),识别出一个物体

  • 随着深度学习的发展:我们现在大量做的是在识别东西是什么,而不是重构成3D 感知分组是视觉领域最为重要的问题。(比如你进入一个教室,那是帽子,那是桌子,那是椅子,这就是感知分组)

  • CNN,卷积神经网络只是深度学习架构的一种,但它是压倒性地成功的一种 它的历史来源于: ImageNet:有5000万张图片,全部都是人工清洗过的,标注了超过2万个分类(可以使用Amazon Mechanic Turk平台众包完成) 1、2010年,比赛开始 2,2012年获胜的就是卷积神经网络(在这之前通常是特征+支持向量机),是分层结构,但它并没有端到端学习的风格特色。, 3、2015年获胜的仍然是卷积神经网络架构,有151层,成为深度残差网路


  • 计算机视觉的主要任务有: ①图像分类:关注的是大图整体,输入图片,判断它属于给定的一些label的哪一个 ②物体检测:告诉你东西具体出现在图片的哪里,比如车在哪儿、行人在哪、锤子,以及物体之间的联系是什么 ③图像描述:输入一个图,识别出其中的物体,用自然语言输出句子,可以用于帮助视障人士看照片。

  • 题外话(CVPR,ICCV) ①、CVPR是IEEE Conference on Computer Vision and Pattern Recognition的缩写,即IEEE国际计算机视觉与模式识别会议。该会议是由IEEE举办的计算机视觉和模式识别领域的顶级会议。 ②、ICCV 的全称是 IEEE International Conference on Computer Vision,即国际计算机视觉大会,由IEEE主办,与计算机视觉模式识别会议(CVPR)和欧洲计算机视觉会议(ECCV)并称计算机视觉方向的三大顶级会议,被澳大利亚ICT学术会议排名和中国计算机学会等机构评为最高级别学术会议,在业内具有极高的评价。不同于在美国每年召开一次的CVPR和只在欧洲召开的ECCV,ICCV在世界范围内每两年召开一次。ICCV论文录用率非常低,是三大会议中公认级别最高的。ICCV会议时间通常在四到五天,相关领域的专家将会展示最新的研究成果。2017年ICCV将在意大利威尼斯举办。

#10

非常赞,优秀笔记➕1


#11

谢谢鼓励:soccer:


#12

万恶的Tensorflow安装的一天: 折腾了很久,出现了各种错误 本人能力有限实在不知道怎么解决, 最终以这位博主的文章结束了我的战斗> http://blog.csdn.net/u014157632/article/details/54948510 感激不尽:rose:


#13

1、back propagation 算法原理理解 ? 通过链式法则将输出结果的全局梯度乘以局部梯度(由前向传播求得),直到最后我们建立的表达式是使梯度基于输入值的一个表达式。 2、sigmoid函数、tanh函数和ReLU函数的区别?以及各自的优缺点?对应的tf函数是? 一、tanh(x)函数的数学公式为: 对应的tf函数是tf.tanh(x, name=None) 函数取值范围(-1,1),函数图像下图所示: 优点:输出是零中心的 缺点:和sigmoid神经元一样,它也存在饱和问题 注意tanh神经元是一个简单放大的sigmoid神经元,具体说来就是:tanh(x)=2sigma(2x)-1。 二、sigmod函数的数学公式为: 对应的tf函数是tf.sigmoid(x, name=None) 函数取值范围(0,1),很大的负数变成0,很大的正数变成1。函数图像下图所示: 优点:它对于神经元的激活频率有良好的解释:从完全不激活(0)到在求和后的最大频率处的完全饱和(saturated)的激活(1)。 缺点:Sigmoid函数饱和使梯度消失。sigmoid神经元有一个不好的特性,就是当神经元的激活在接近0或1处时会饱和:在这些区域,梯度几乎为0。回忆一下,在反向传播的时候,这个(局部)梯度将会与整个损失函数关于该门单元输出的梯度相乘。因此,如果局部梯度非常小,那么相乘的结果也会接近零,这会有效地“杀死”梯度,几乎就有没有信号通过神经元传到权重再到数据了。还有,为了防止饱和,必须对于权重矩阵初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习了。 Sigmoid函数的输出不是零中心的。这个性质并不是我们想要的,因为在神经网络后面层中的神经元得到的数据将不是零中心的。这一情况将影响梯度下降的运作,因为如果输入神经元的数据总是正数(比如在f=w^Tx+b中每个元素都x>0),那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数(具体依整个表达式f而定)。这将会导致梯度下降权重更新时出现z字型的下降。然而,可以看到整个批量的数据的梯度被加起来后,对于权重的最终更新将会有不同的正负,这样就从一定程度上减轻了这个问题。因此,该问题相对于上面的神经元饱和问题来说只是个小麻烦,没有那么严重。 三、ReLU函数公式为 对应的tf函数是tf.nn.relu(features, name=None) 这个激活函数就是一个关于0的阈值。 函数图像为: 使用ReLU有以下一些优缺点: 优点:相较于sigmoid和tanh函数,ReLU对于随机梯度下降的收敛有巨大的加速作用( Krizhevsky 等的论文指出有6倍之多)。据称这是由它的线性,非饱和的公式导致的。 优点:sigmoid和tanh神经元含有指数运算等耗费计算资源的操作,而ReLU可以简单地通过对一个矩阵进行阈值计算得到。 缺点:在训练的时候,ReLU单元比较脆弱并且可能“死掉”。举例来说,当一个很大的梯度流过ReLU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,因为这导致了数据多样化的丢失。例如,如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。

参考:> http://blog.csdn.net/dabokele/article/details/58713727

https://zhuanlan.zhihu.com/p/21462488?refer=intelligentunit 3、 softmax和cross_entropy原理理解释? http://blog.csdn.net/supercally/article/details/54234115 http://blog.csdn.net/u013010889/article/details/76343758 4、tf.placeholder() 、tf.constant()、tf.Variable()的区别?

  1. tf.Variable:主要在于一些可训练变量(trainable variables),比如模型的权重(weights,W)或者偏执值(bias); 声明时,必须提供初始值; 名称的真实含义,在于变量,也即在真实训练时,其值是会改变的,自然事先需要指定初始值;
  2. tf.placeholder:用于得到传递进来的真实的训练样本: 不必指定初始值,可在运行时,通过 Session.run 的函数的 feed_dict 参数指定; 这也是其命名的原因所在,仅仅作为一种占位符; https://www.cnblogs.com/nowornever-L/p/6908775.html tf.constant():
  3. tf.constant(value,dtype=None,shape=None,name=’Const’) 创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。value可以是一个数,也可以是一个list。 如果是一个数,那么这个常亮中所有值的按该数来赋值。 如果是list,那么len(value)一定要小于等于shape展开后的长度。赋值时,先将value中的值逐个存入。不够的部分,则全部存入value的最后一个值。

#14

BN的NB之处


BN起因: 主要是因为covariate shift,简单来说就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”,Internal指的是深层网络的隐层,从而导致训练速度减慢,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的非线性区靠近,所以这导致后向传播时低层神经网络的梯度消失。 大家应该都知道,我们一般在训练网络的时会将输入减去均值,还有些人甚至会对输入做白化等操作,目的是为了加快训练。为什么减均值、白化可以加快训练呢,这里做一个简单地说明:首先,图像数据是高度相关的,假设其分布如下图a所示(简化为2维)。由于初始化的时候,我们的参数一般都是0均值的,因此开始的拟合y=Wx+b,基本过原点附近,如图b红色虚线。因此,网络需要经过多次学习才能逐步达到如紫色实线的拟合,即收敛的比较慢。如果我们对输入数据先作减均值操作,如图c,显然可以加快学习。更进一步的,我们对数据再进行去相关操作,使得数据更加容易区分,这样又会加快训练,如图d。 白化的方式有好几种,常用的有PCA白化:即对数据进行PCA操作之后,在进行方差归一化。这样数据基本满足0均值、单位方差、弱相关性。作者首先考虑,对每一层数据都使用白化操作,但分析认为这是不可取的。因为白化需要计算协方差矩阵、求逆等操作,计算量很大,此外,反向传播时,白化操作不一定可导。

BN原理: 为了防止“梯度弥散”。在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1的正态分布。而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入,从而保证整个network的capacity。(有关capacity的解释:实际上BN可以看作是在原模型上加入的“新操作”,这个新操作很大可能会改变某层原来的输入。当然也可能不改变,不改变的时候就是“还原原来输入”。如此一来,既可以改变同时也可以保持原输入,那么模型的容纳能力(capacity)就提升了。)

BN优点:(BN实则为正则化) 1)提高了gradient flow 2)允许较高的学习率 3)减少了对初始化的依赖

何处用BN: 在FC或者conv layer后面(X=WU+B激活值获得之后、非线性函数变换之前)

用于Test时,BN层的作用不同: 在test的时候希望函数是确定的,在train时使用μ和σ来进行规范化,但在test时,可以记住全部数据的μ和σ的滑动平均,直接使用。

摘录1: 作者:魏秀参 链接:https://www.zhihu.com/question/38102762/answer/85238569 来源:知乎

摘录2:http://blog.csdn.net/zhikangfu/article/details/53391840


#15

如何理解卷积? 对输入函数的每一个位置进行加权累加。 卷积滤波: 卷积是图像处理中的一种常用的线性滤波方法,使用卷积可以达到图像降噪、锐化等多种滤波效果。 卷积核: 实际为一个权值矩阵,表示如何处理单个像素与其领域像素之间的关系。卷积核依次滑过图片中的每一个像素位置,即求两个矩阵的滑动点积或滑动内积。 常用的pooling: 1)最大值池化Max pooling 2)平均池化 average pooling 利用最大值或平均值的方法使特征提取拥有“平移不变性”

Learning rate 的选择: 设置一个足够小的 learning rate,以使参数能大致收敛在极值附近。过小训练慢,过大导致目标函数在最低点附近跳跃。

机器学习中,有哪些正则化的方法?目的是什什么?Dropout的好处是? 正则化方法:防止过拟合,提高泛化能力 避免过拟合的方法有很多:early stopping、数据集扩增(Data augmentation)、正则化(Regularization)包括L1、L2(L2 regularization也叫weight decay),dropout。 详情参见http://www.mamicode.com/info-detail-517504.html

如何理理解Momentum?weight decay?它们在神经网络训练中的作用是什么? 一、weight decay(权值衰减)的使用既不是为了提高你所说的收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。 二、momentum是梯度下降法中一种常用的加速技术。对于一般的SGD,沿负梯度方向下降。而带momentum项的SGD通俗的理解就是,如果上一次的momentum与这一次的负梯度方向是相同的,那这次下降的幅度就会加大,所以这样做能够达到加速收敛的过程。 作者:陈永志 链接:https://www.zhihu.com/question/24529483/answer/114711446 来源:知乎

各种优化方法(SGD/Momentum/Adagrad/Adam等),对比优缺点? https://zhuanlan.zhihu.com/p/22252270 引用 [1]Adagrad [2]RMSprop[Lecture 6e] [3]Adadelta [4]Adam [5]Nadam [6]On the importance of initialization and momentum in deep learning [7]Keras中文文档 [8]Alec Radford(图) [9]An overview of gradient descent optimization algorithms [10]Gradient Descent Only Converges to Minimizers [11]Deep Learning:Nature