简介_简介怎么写吸引人 - CSDN
精华内容
参与话题
  • MySQL 简介

    万次阅读 2018-12-17 13:22:56
    MySQL是一个关系型数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL是开源的。 MySql支持大型的数据库,可以处理拥有成千上万条...

        MySQL是一个关系型数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    • MySQL是开源的。
    • MySql支持大型的数据库,可以处理拥有成千上万条记录的大型数据库。
    • MySql支持标准的SQL数据语言形式。
    • MySql可以允许在多个系统上,并且支持多种语言。
    • MySql对PHP有很好的支持。
    • MySql支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB
    • MySql是可以定制的,采用了GPL协议。

     

    参考:

    https://www.yuque.com/docs/share/c4a93553-9d9f-45e4-8ff2-9e66c3000807

    展开全文
  • .NET框架简介

    万次阅读 多人点赞 2018-04-20 10:44:24
    初学.NET肯定会有一系列的疑问,比如(以下为自己的疑问): 1) 何为.... 2) 程序集是什么,它是如何在CLR(通用语言运行时)中运行的? 3) C#与VB.NET同属于.NET平台,它们之间的根本联系和区别,为何他们之间的程序...

    初学.NET肯定会有一系列的疑问,比如(以下为自己的疑问):

      1) 何为. NET框架,它都包含哪些东西?

      2)  程序集是什么,它是如何在CLR(通用语言运行时)中运行的?

      3)  C#与VB.NET同属于.NET平台,它们之间的根本联系和区别,为何他们之间的程序集能互相调用(如果创建一种新型的面向. NET的语言,要遵循什么)?

      想要明白如上问题,就需要弄清楚CIL(通用中间语言)、CLR(通用语言运行时)、CTS(通用类型系统)、CLS(通用语言规范)等等的概念,下面是自己看了一些他人的文章后进行的简单总结。


    首先通俗地理解一下.NET平台、.NET框架(Framework)的概念


      “平台”(这里指软件技术平台,下面都指的是这个)就是能够独立运行并自主存在,为其所支撑的上层系统和应用提供运行所依赖的环境。提取一下就是,平台是一个环境。只要符合平台规范的应用都能扔到上面来运行。

      我的通俗理解.NET平台是.NET应用与操作系统之间的一个中介,首先它为.NET应用运行提供了环境,其次它为.NET应用与操作系统之间起到了“解耦”的作用,使得平台上层的应用不依赖与操作系统(的机器指令集)。至于如何解耦,要看它的编译过程,下面会进行解释。


      


      框架就好似某种应用的半成品,是前人根据经验开发的可复用的一组组件,供你选用,然后添血加肉完成你自己的系统。其思想与设计模式有些相似,框架是代码复用,设计模式是设计复用。框架又好似提供的一组规范,它规范应用系统的开发与部署,众所周知的J2EE框架就是定义了13个规范。相类似,NET Framework也提供了很多规范,下面会进行介绍。


      


      粗略地说,一个.NET应用是一个运行于.NET Framework之上的应用程序。或者,一个.NET应用是一个使用.NET Framework类库来编写,并运行于公共语言运行时CLR(通用语言运行时)之上的应用程序。下面开始解决上面提出的问题:


    程序集及其运行


      首先引出两个概念CIL——通用中间语言、CLR——通用语言运行时两个概念(具体概念看百度百科)。

      我们知道,普通的无平台应用(例如:VB应用程序)经过预编译、编译、汇编、链接几个步骤后,最终生成的可执行文件中就已经包含了本地处理器的代码,支持它运行的是操作系统和本地的机器指令集。

      在.NET框架下,高级语言(例C#)经过编译后生成的结果文件被称做程序集,其后缀名是.dll(类库)或.exe(可执行程序,控制台应用程序编译结果)。而程序集并不是二进制机器码,是不能直接运行的,需要经过CLR(通用语言运行时)的即时编译才能生成被操作系统所识别的机器码。

      下面我们用C#和VB.NET分别写两个相同控制台应用程序,都定义一个字符串“hello world”,然后输出:

      C#:


      


      VB.NET:


      


      然后经过编译,分别生成相应的程序集.exe文件,下面我们用vs自带的反编译工具-IL DASM(目录:开始-- >vs2010-- >Windows SDK Tools -- >IL 反汇编程序)分别打开上面生成的程序集。

      C#程序集:


      


      VB.NET程序集:


      


      对比两个程序集文件,可以发现两者的代码几乎完全一致。

      上面用IL DASM打开的文件中的类似汇编的代码即为CIL-通用中间语言。可以看到VB.NET与C#,编译后生成的程序集的格式是相同的;当程序所实现的功能相同时,程序集所包含的CIL代码也是类似的。由此可得下图:


      


      上面提到了程序集(CIL)并不是CPU可以直接执行的本地机器语言。这种语言还需要.NET运行时(CLR)环境的支持,在执行之前,进行一个被称为即时编译的二次编译过程,才能转变成计算机可以识别的指令。


      


      CIL也是一种程序语言,它是比C#低级,比机器码高级的一种中间码语言,类似Java中的.Class文件。从前面截图可知CIL是一种基于堆栈的语言,同时,它提供了class、interface、继承、多态等诸多面向对象的语言特性,因此它又是完全面向对象的语言。如果愿意,甚至可以直接编写CIL代码,并且使用CIL的编译工具IL ASM(IL Assembler,IL汇编程序)来对它进行编译。只不过,和大多数低级语言一样,这种方式会使开发效率会变得很低。

      C#源程序在被编译为程序集以后,就独立于C#,因此程序集可以由其他种类的语言所调用;同时,因为程序集并没有包含本地机器的指令,所以它与具体的机器类型也分隔开了,可以被装有.NET框架的任何机器运行。


    C#与VB.NET的根本联系与区别


      (下文大部分引用一些书籍或博文)

      这里要引入CTS——公共类型系统、CLS——公共语言规范两个概念。

      设想我们如何开发一套类似C#或VB.NET的新的语言(编译后生成CIL代码,可以在.NET环境下运行)?

      要开发的新语言相当于CIL的高级语言版本,所以实际上要做什么并不是由新语言决定的,而是由CIL来决定的。因此,需要一套CIL的定义、规则或标准。这套规则定义了我们的语言可以做什么,不可以做什么,具有哪些特性。这套规则就称作CTS(Common Type System,公共类型系统)。任何满足了这套规则的高级语言就可以称为面向.NET框架的语言。C#和VB.NET不过是微软自己开发的一套符合了CTS的语言,实际上还有很多的组织或团体,也开发出了这样的语言,比如Delphi.Net、FORTRAN等。

      CTS规定了可以在语言中定义的数据类型、访问级别比如Private、Public、Family(C#中为Protected)、Assembly(C#中为internal)、Family and assembly(C#中没有提供实现)、Family or assembly(C#中为protected internal)。

      CTS还定义了一些约束,例如,所有类型都隐式地继承自System.Object类型,所有类型都只能继承自一个基类。从CTS的名称和公共类型系统可以看出,不仅C#语言要满足这些约束,所有面向.NET的语言都需要满足这些约束

      上面提到了,C#并没有提供Family and assembly的实现,C#中也没有全局方法(Global Method)。换言之,C#只实现了CTS 的一部分功能。也就是说,CTS规范了语言能够实现的所有能力,但是符合CTS规范的具体语言实现不一定要实现CTS规范所定义的全部功能。

      显然,由于CIL是.NET运行时所能理解的语言,因此它实现了CTS的全部功能。虽然它是一种低级语言,但是实际上,它所具有的功能更加完整。C#语言和CIL的关系,可以用如下表示:

      


      

      既然已经理解了CTS是一套语言的规则定义,就可以开发一套语言来符合CTS了。假设这个语言叫做B#,它所实现的CTS非常有限,仅实现了其中很少的一部分功能,它与CTS和C#语言的关系可能如下:


      


      那么现在就有一个问题:由C#编写的程序集,能够引用由B#编写的程序集吗?答案显然是不能。虽然C#和B#同属于CTS旗下,但是它们并没有共通之处。因此,虽然单独的B#或C#程序可以完美地在.NET框架下运行,但是它们之间却无法相互引用。

      如果B#项目期望其他语言类型的项目能够对它进行引用,就需要B#中公开的类型和功能满足C#语言的特性,即它们需要有共通之处。B#中不公开的部分(private、internal、protected)是不受影响的,可以使用独有的语言特性,因为这些不公开的部分本来就不允许外部进行访问。因此,如果B#想要被C#所理解和引用,它公开的部分就要满足C#的一些规范,此时,它与CTS和C#语言的关系就会变成如下:


      


      如果世界上仅有C#和N#两种语言就好办了,把它们共同的语言特性提取出来,然后要求所有公开的类型都满足这些语言特性,这样C#和N#程序集就可以相互引用了。可问题是:语言类型有上百种之多,并且.NET的设计目标是实现一个开放的平台,不仅现有的语言经过简单修改就可以运行在.NET框架上,后续开发的新语言也可以,而新语言此时并不存在,如何提取出它的语言特性?因此又需要一套规范和标准来定义一些常见的、大多数语言都共有的语言特性。

      对于未来的新语言,只要它公开的部分能够满足这些规范,就能够被其他语言的程序集所使用。这个规范就叫做CLS (Common Language Specification,公共语言规范)。很明显,CLS是CTS的一个子集。那么VB.NET、C#、B#的关系就可表达为:


      


      如果利用C#开发的一个程序集的公开部分仅采用了CLS中的特性,那么这个程序集就叫做CLS兼容程序集(CLScompliant assembly)。显然,对于上面提到的FCL框架类库,其中的类型都符合CLS,仅有极个别类型的成员不符合CLS,这就保证了所有面向.NET的语言都可以使用框架类库中的类型。

      满足CLS就是要求语言特性要一致,那么什么叫做语言特性?这里给出几个具体的语言特性:是否区分大小写,标识符的命名规则如何,可以使用的基本类型有哪些,构造函数的调用方式(是否会调用基类构造函数),支持的访问修饰符等。

      那么我们如何检验程序集是否符合CLS呢?.NET为我们提供了一个特性CLSCompliant,便于在编译时检查程序集是否符合CLS。我们来看下面一个例子:


      


      可以注意到,在CLSTest类的前面为程序集加上了一个CLSCompliant特性,表明这个程序集是CLS兼容的。但是,有三处并不满足这个要求,因此编译器给出了警告信息。这三处是:

      •不能以大小写来区分成员,因此字段name和方法Name()不符合CLS。

      •方法的返回类型和参数类型必须是CLS兼容的,uint和sbyte类型并非CLS兼容,因此GetValue()和SetValue()方法不符合CLS。

      •标识符的命名不能以下划线“_”开头,因此属性_MyProperty不符合CLS。

      还会注意到,编译器给出的只是警告信息,而非错误信息,因此可以无视编译器的警告,不过这个程序集只能由其他C#语言编写的程序集所使用。


    总结


             我们对.NET框架的第一感觉就是,.NET框架所提供的庞大类库及编写代码所采用的C#语言等,实际上远不止这些。还包含许多的内容,例如CLI、CIL、CTS、CLS、CLR、JIT、BCL、FCL等,这些内容在《.NET之美》这本书中都进行了深入浅出的讲解,对初学者很实用。如果想真正的理解.NET,仅仅会编码是远远不够得,上面这些东西才是根本

    展开全文
  • YAML简介

    千次阅读 2019-03-03 17:26:06
    YAML是一个可读性高,用来表达数据序列的格式。YAML参考了其它多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式中获得灵感。Clark Evans在2001年首次发表了这种语言。当前已经有数种编程语言或...

    YAML是一个可读性高,用来表达数据序列的格式。YAML参考了其它多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式中获得灵感。Clark Evans在2001年首次发表了这种语言。当前已经有数种编程语言或脚本语言支持这种语言。最新稳定版本为1.2,于2009年发布。YAML文件扩展名为.yaml或.yml。

    YAML是”YAML Ain’t a Markup Language”(YAML不是一种标记语言)的递归缩写。在开发这种语言时,YAML的意思其实是:”Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

    YAML功能:YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。尽管它比较适合用来表达层次结构式(hierarchical model)的数据结构,不过也有精致的语法可以表示关系性(relational model)的数据。由于YAML使用空白字符和分行来分隔数据,使得它特别适合用grep/Python/Perl/Ruby操作。其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构时会变得复杂而难以辨认。

    在YAML中,字符串不一定要用双引号标示。另外,在缩进中空白字符的数目并不是非常重要,只要相同层次结构的元素左侧对齐就可以了(不过不能使用TAB字符)。文件中重复的部分用这个方法处理:使用锚点(&)和引用(*)标签。也可以在文件中加入选择性的空行,以增加可读性。在一个文件中,可同时包含多个文件,并用"---"分隔。选择性的符号"..."可以用来表示文件结尾。

    YAML构成要素

    YAML基本组件:YAML提供缩进/区块以及内置(inline)两种格式,来表示清单和散列表:

    (1). 清单:习惯上清单比较常用区块格式(block format)表示,也就是用短杠+空白字符作为起始;另外还有一种内置格式(inline format),可以选择用方括号围住,并用逗号+空白区隔(类似JSON的语法);

    (2). 散列表:键值和数据由冒号及空白字符分开。区块形式(常使用与YAML数据文档中)使用缩进和换行符分隔key: value对。内置形式(常使用与YAML数据流中)在大括号中使用逗号+空白字符分隔key: value对。

    区块的字符:再次强调,字符串不需要包在引号之内。有两种方法书写多行文字(multi-line strings),一种可以保存新行(使用”|”字符),另一种可以折叠新行(使用”>”字符)。

    保存新行(newlines preserved):根据设置,前方的引领空白符号(leading white space)必须排成条状,以便和其它数据或是行为明显区分

    折叠新行(newlines folded):和保存新行不同的是,换行字符会被转换成空白字符,而引领空白字符则会被自动消去。

    YAML高级组件

    数据合并和参考:为了维持文件的简洁,并避免数据输入的错误,YAML提供了结点参考(*)和散列合并(<<)参考到其他结点标签的锚点标记(&)。参考会将树状结构加入锚点标记的内容,并可以在所有数据结构中运作合并只有散列表可以使用,可以将键值自锚点标记复制到指定的散列表中。

    YAML自动判定数据形态是哪一种实体。但有时用户会想要将数据强制转型成自定的某种类型。最常见的状况是字符串,有时候可能看起来像数字或布尔值,这种时候可以使用双引号,或是使用严格类型标签。

    除了一般的数据形态之外,用户也可以使用一些较为高级的类型,但不保证可被每种解析器分析。使用时和强制转型类似,要在形态名称之前加上两个惊叹号(!!)。

    YAML语法

    (1). YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16;

    (2). 使用空白字符为文件缩进来表示结构;不过不能使用跳格字符(TAB)

    (3). 注解由井字号(#)开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解);

    (4). 每个清单成员以单行表示,并用短杠+空白起始。或使用方括号,并用逗号+空白分开成员;

    (5). 每个散列表的成员用冒号+空白分开键值和内容。或使用大括号,并用逗号+空白分开;散列表的键值可以用问号起始,用来明确的表示多个词汇组成的键值

    (6). 字符串平常并不使用引号,但必要的时候可以用双引号或单引号框住使用双引号表示字符串时,可用倒斜线(\)开始的转义字符(这跟C语言类似)表示特殊字符

    (7). 区块的字符串用缩进和修饰符(非必要)来和其他数据分隔,有新行保留(preserve)(使用符号”|”)或新行折叠(fold)(使用符号”>”)两种方式;

    (8). 在单一文件中,可用连续三个连字号(---)区分多个文件或表示文件的开始另外,还有选择性的连续三个点号(...)用来表示文件结尾

    (9). 重复的内容可使从参考标记星号(*)复制到锚点标记(&)

    (10). 指定格式(即类型强行转换)可以使用两个惊叹号(!!),后面接上名称。

    YAML在使用逗号及冒号时,后面都必须接一个空白字符,所以可以在字符串或数值中自由加入分隔符号而不需要使用引号。另外还有两个特殊符号在YAML中被保留,有可能在未来的版本被使用(@)和(`)。

    YAML的数据形态不依赖引号之特点,使的YAML文件可以利用区块,轻易的插入各种其他类型文件,如:XML、SDL、JSON,甚至插入另一篇YAML。

    以上内容主要摘自中文维基百科:https://zh.wikipedia.org/wiki/YAML 

    在Python中可以通过pyyaml来解析或生成yaml文件,以下是yaml测试文件(config.yml):

    # config file:
    ---
    
    blog:
      name: csdn
      id: fengbingchun
      url: https://blog.csdn.net/fengbingchun
    
    commands:
      version:
      - g++ --version
      - cmake --version
      - git --version
    
    value1: true
    value2: false
    value3: ~
    
    number1: 123
    number2: !!str 123
    number3: "123"
    number4: !!float 123
    
    github: 
      - https://github.com/fengbingchun
      - Repositories NN_Test Face_Test
        Messy_Test CUDA_Test
    
    data1: |
      There once
      was a
         short man
    
    data2: >
      There once
      was a
         short man
    
    date1: 2019-03-03
    
    step: &id001   # defines anchor label &id001
      instrument:  Lasik 2000
      pulseEnergy: 5.4
    
    step2: *id001   # refers to the first step (with anchor &id001)
    
    ...
    

    python测试代码如下:

    import sys
    import yaml
    
    def main():
    	print("#### test start ####")
    	f = open("config.yml")
    	content = yaml.load(f)
    	print(content)
    	print("#### test end ####")
    
    if __name__ == "__main__":
    	main()
    
    

    执行结果如下:

     

    GitHubhttps://github.com/fengbingchun/Messy_Test

    展开全文
  • MobileNetV1 & MobileNetV2 简介

    万次阅读 多人点赞 2020-10-09 11:14:02
    一、参数数量和理论计算量 1、定义 参数数量(params):关系到模型大小,单位通常为M,通常参数用 float32 表示,所以模型大小是参数数量的 4 倍 理论计算量(FLOPs): ...是 floating point operations 的...


    一、参数数量和理论计算量

    1、定义

    • 参数数量(params):指模型含有多少参数,直接决定模型的大小,也影响推断时对内存的占用量
      • 单位通常为 M,通常参数用 float32 表示,所以模型大小是参数数量的 4 倍左右
      • 参数数量与模型大小转换示例:10M float32 bit = 10M × 4 bytes = 40Mb
    • 理论计算量(FLOPs):指模型推断时需要多少计算次数
      • 是 floating point operations 的缩写(注意 s 小写),可以用来衡量算法/模型的复杂度,这关系到算法速度,大模型的单位通常为 G(GFLOPs:10亿次浮点运算),小模型单位通常为 M
      • 通常只考虑乘加操作(Multi-Adds)的数量,而且只考虑 CONV 和 FC 等参数层的计算量,忽略 BN 和 PReLU 等等。一般情况,CONV 和 FC 层也会 忽略仅纯加操作 的计算量,如 bias 偏置加和 shotcut 残差加等,目前有 BN 的卷积层可以不加 bias
    • PS:计算平台的两个指标如下所示
      • 算力: 计算平台倾尽全力每秒钟所能完成的浮点运算数,单位一般为 TFLOPS(floating point of per second)
      • 带宽: 计算平台倾尽全力每秒所能完成的内存(CPU 内存 or GPU 显存)交换量,单位一般为 GB/s(Gbyte/second),计算公式一般为 内存频率 × 内存位宽 / 8

    2、计算公式

    假设卷积核大小为 Kh×KwK_h \times K_w,输入通道数为 CinC_{in},输出通道数为 CoutC_{out}输出特征图的宽和高分别为 WWHH,这里忽略偏置项

    • CONV 标准卷积层

      • params: Kh×Kw×Cin×CoutK_h \times K_w \times C_{in} \times C_{out}
      • FLOPs:Kh×Kw×Cin×Cout×H×W=params×H×WK_h \times K_w \times C_{in} \times C_{out} \times H \times W = params \times H \times W
    • FC 全连接层(相当于 k=1)

      • params: Cin×CoutC_{in} \times C_{out}
      • FLOPs:Cin×CoutC_{in} \times C_{out}
    • 参数量与计算量:https://github.com/Lyken17/pytorch-OpCounter


    二、MobileNetV1: Efficient Convolutional Neural Networks for Mobile Vision Application

    1、能够减少参数数量和计算量的原理

    • 深度可分离卷积的使用
      • 在进行 depthwise 卷积时只使用了一种维度为in_channels的卷积核进行特征提取(没有进行特征组合)
      • 在进行 pointwise 卷积时只使用了output_channels 种 维度为in_channels 1*1 的卷积核进行特征组合,普通卷积不同 depth 层的权重是按照 1:1:1…:1的比例进行相加的,而在这里不同 depth 层的权重是按照 不同比例(可学习的参数) 进行相加的
      • 参数数量由原来的p1 = F*F*in_channels*output_channels 变为了p2 = F*F*in_channels*1 + 1*1*in_channels*output_channels,减小为原来的p2/p1 = 1/output_channels + 1/F*F,其中 F 为卷积核的尺寸,若 F=3F = 3,参数量大约会减少到原来的 1/81/91/8 \to 1/9
      • Note: 原论文中对第一层没有用此卷积,深度可分离卷积中的每一个后面都跟 BN 和 RELU
        在这里插入图片描述
    • Global Average Pooling 的使用:这一层没有参数,计算量可以忽略不计
    • CONV/s2(步进2的卷积)代替 MaxPool+CONV:使得参数数量不变,计算量变为原来的 1/4 左右,且省去了MaxPool 的计算量
    • Note:采用 depth-wise convolution 会有一个问题,就是导致 信息流通不畅 ,即输出的 feature map 仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了 point-wise(1*1) convolution 帮助信息在通道之间流通

    2、MobileNetV1 中引入的两个超参数

    • Width Multiplier(α\alpha): Thinner Models
      • 所有层的 通道数(channel) 乘以 α\alpha 参数(四舍五入),模型大小近似下降到原来的 α2\alpha^{2} 倍,计算量下降到原来的 α2\alpha^{2}
      • α(0,1]\alpha \in (0, 1] with typical settings of 1, 0.75, 0.5 and 0.25,降低模型的宽度
    • Resolution Multiplier(ρ\rho): Reduced Representation
      • 输入层的 分辨率(resolution) 乘以 ρ\rho 参数 (四舍五入),等价于所有层的分辨率乘 ρ\rho,模型大小不变,计算量下降到原来的 ρ2\rho^{2}
      • ρ(0,1]\rho \in (0, 1],降低输入图像的分辨率

    3、标准卷积和深度可分离卷积的区别

    这里写图片描述


    4、TensorFlow 中的代码实现

    • 可使用 tensorflow 中的tf.nn.separable_conv2d() 来实现, 参数depthwise_filter中的 channel_multiplier 设为 1 即可
    # 使用 slim 来实现
    def _depthwise_separable_conv(inputs,
                                  num_pwc_filters,
                                  kernel_width,
                                  phase,
                                  sc,
                                  padding='SAME',
                                  width_multiplier=1,
                                  downsample=False):
        """ Helper function to build the depth-wise separable convolution layer.
        """
        num_pwc_filters = round(num_pwc_filters * width_multiplier)
        _stride = 2 if downsample else 1
    
        # skip pointwise by setting num_outputs=None
        depthwise_conv = slim.separable_convolution2d(inputs,
                                                      num_outputs=None,
                                                      stride=_stride,
                                                      depth_multiplier=1,
                                                      kernel_size=[kernel_width, kernel_width],
                                                      padding=padding,
                                                      activation_fn=None,
                                                      scope=sc + '/depthwise_conv')
    
        bn = slim.batch_norm(depthwise_conv, activation_fn=tf.nn.relu, is_training=phase, scope=sc + '/dw_batch_norm')
        pointwise_conv = slim.convolution2d(bn,
                                            num_pwc_filters,
                                            kernel_size=[1, 1],
                                            activation_fn=None,
                                            scope=sc + '/pointwise_conv')
        bn = slim.batch_norm(pointwise_conv, activation_fn=tf.nn.relu, is_training=phase, scope=sc + '/pw_batch_norm')
        return bn
    

    5、Caffe 中的代码实现

    • 海思 NNIE 中的 DepthwiseConv 层便是经过卷积优化后的
      在这里插入图片描述

    三、MobileNetV2:Inverted Residuals and Linear Bottlenecks

    1、主要改进点

    • 引入残差结构,先升维再降维,增强梯度的传播,显著减少推理期间所需的内存占用(Inverted Residuals
    • 去掉 Narrow layer(low dimension or depth) 后的 ReLU,保留特征多样性,增强网络的表达能力(Linear Bottlenecks
    • 网络为全卷积的,使得模型可以适应不同尺寸的图像;使用 RELU6(最高输出为 6)激活函数,使得模型在低精度计算下具有更强的鲁棒性
    • MobileNetV2 building block 如下所示,若需要下采样,可在 DWise 时采用步长为 2 的卷积;小网络使用小的扩张系数(expansion factor),大网络使用大一点的扩张系数(expansion factor),推荐是5~10,论文中 t=6t = 6
      在这里插入图片描述

    2、和 MobileNetV1 的区别在这里插入图片描述

    3、和 ResNet 的区别

    在这里插入图片描述

    4、代码实现


    四、参考资料

    1、CVPR 2018 高效小网络探密(上)
    2、CVPR 2018 高效小网络探密(下)
    3、MobileNet V2 论文初读
    4、https://github.com/shicai/MobileNet-Caffe

    展开全文
  • WEB简介

    万次阅读 多人点赞 2018-09-01 18:23:51
    一、Web简介 1、 简介 早期的web应用主要是静态页面的浏览,这些静态页面使用HTML语言编写,放在服务器上,用户使用浏览器通过HTTP协议请求服务器上的web页面,服务器上的web服务器软件接受到用户发送的请求后...
  • IntelliJ IDEA的简介

    万次阅读 2019-01-16 09:57:28
    IntelliJ IDEA的简介
  • JavaScript——简介

    万次阅读 多人点赞 2018-03-28 16:29:09
    1.简介JavaScript(Java脚本)是一种基于对象(Object)和事件驱动( Event Driven)并具有安全性能的脚本语言,使用JavaScript可以轻松的实现与HTML的互操作,并且完成丰富的页面交互效果,它是通过嵌入或调入在标准...
  • 开发人员一定要加入收藏夹的网站

    万次阅读 热门讨论 2006-09-27 11:20:00
    http://www.gotapi.com/ 语言:英语 简介:HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查询网站。http://www.w3schools.com/ 语言:英语 简介:W3C制定的标准诸如XML,HTML,XSL等等的在线学习教程。...
  • iOS开发个人独立博客收集

    万次阅读 2013-11-01 15:04:15
    现在技术博客网站有很多,如CSDN,CNBlog,ITEye等,论坛的话主要是要...简介:一个在日本工作的哥哥,写的文章有深度 唐巧 简介:粉笔网,iOS主程 zhenby's blog 简介:技术牛人 “我”的开发笔记 简介
  • 程序员常用Mac软件整理

    千次阅读 2016-10-13 10:01:19
    一直觉得用什么软件本是个人习惯问题,但是自从带了team就发现很多人没有好奇心不会自己寻找整理...软件管理homebrew简介: mac 命令行软件管理神器 官网: http://brew.sh/index_zh-cn.html 类型: 命令行 license: 免
  • IT人士必去的10个网站

    万次阅读 热门讨论 2010-06-25 11:35:00
    1、Chinaunix 网址:http://www.chinaunix.net/ 简介:中国最大的linux/unix技术社区。 2、ITPub 网址:http://www.itpub.net/ 简介:有名气的IT技术论坛,看看它的alexa排名就知道有多火了,尤其以...
  • 深度学习简介--入门介绍PPT

    千次阅读 多人点赞 2018-07-23 14:14:21
    背景介绍 以下深度学习PPT内容为在 测试组 分享的内容。 PPT为自己制作,图片来源于网络(其他博客或文章中),部分...MATLAB 深度学习简介电子书 ...
  • CV之IC:计算机视觉之图像分类(Image Classification)方向的简介、使用方法、案例应用之详细攻略 目录 图像分类的简介 1、相关概念 2、深度网络模型的开端 3、图像分类网络模型的发展 4、图像分类轻量化...
  • Android Studio简介

    万次阅读 2018-07-24 15:34:03
    1. Android Studio简介  Android Studio是Google推出基于IntelliJ IDEA的Android应用开发集成开发环境(IDE),而且提供了更多提高Android应用的构建效率的功能;  1) 基于Gradle的灵活构建系统  2)Instant ...
  • android DevAppsDirect开源项目

    千次阅读 2013-12-13 09:48:33
    http://www.androidviews.net  ... test 最低版本: 简介: 地址: 效果图: testAppRaterStyleDialogs for androidHoloGraphLibraryActionBar-PullToRefreshColorPickerAct
  • golang: Go语言:简介

    千次阅读 2019-07-05 10:07:27
    go在win7/cmd64中的安装 golang: Go语言:简介(二) golang: Go语言:简介(一) golang: Go语言:简介 http://www.kuaizh.com/cntlist.php
  • 目录: Spring Data Redis 学习笔记

    千次阅读 2019-08-28 10:57:35
    01. SDR(spring-data-redis) 简介 02. SDR 环境搭建 03. SDR RedisTemplate 简介 04. SDR RedisTemplate API 简介 05. SDR StringRedisTemplate 简介 06. SDR 序列化方式-Serializer 07. SDR 自定义序列化-...
  • iPhone开发学习笔记 - 目录

    万次阅读 2011-08-01 07:13:16
    为了方便以后浏览,决定在这里弄一个目录 我的iPhone学习笔记 - 教程 - 目录 Objective-C 简介 - 1Objective-C 简介 - 2Objective-C 简介 - 3Objective-C 简介 - 4Objective-C 简介 - 5第一个iPhone程序第一个...
  • 1、效果图预览2、准备工作 在拿到效果图后不要先急着去写代码,而是要去分析一下页面的整体结构,用什么方式定位和布局。小程序里建议使用flex布局,因为小程序对flex的支持是很好的。 上一篇博客中完成了轮播图...
  • 机器学习系列(一)——机器学习简介

    万次阅读 多人点赞 2020-09-30 19:12:47
    前前后后接触机器学习也有一年时间,但一直没有系统整理总结过。从本篇博客开始,将记录下我的学习内容与参考资料,系列按照李宏毅的机器学习课程,吴恩达的机器学习课程和周志华的西瓜书为主线。...
1 2 3 4 5 ... 20
收藏数 1,071,434
精华内容 428,573
关键字:

简介