caffe的一些概念理解

有一天,师姐问我,epoch和iteration有什么区别?我一时语塞,竟然遍寻百度而不得,最后在stackoverflow上找到一个我认为比较靠谱的答案,虽然它不是最高票,但是是最好理解的,深得我心。原答案在此: 
http://stackoverflow.com/questions/4752626/epoch-vs-iteration-when-training-neural-networks 
简单起见,我用自己的语言描述一下: 
epoch——使用整个训练样本集传播一次,一次传播 = 一次前向传播 + 一次后向传播。但是考虑到内存不够用的问题,训练样本们往往并不是全都一起拿到内存中去训练,而是一次拿一个batch去训练,一个batch包含的样本数称为batch size。 
iteration——使用batch size个样本传播一次。同样,一次传播=一次前向传播+一次后向传播。

eg. 我们有1000个训练样本,batch size为100,那么完成一次epoch就需要10个iteration。

先上一张图,大家很熟悉的一张图。

首先说明一个概念:在caffe中的一次迭代iterration指的是一个batch,而不是一张图片。下面就主要说下2个概念

test_iter: 在测试的时候,需要迭代的次数,即test_iter* batchsize(测试集的)=测试集的大小,测试集batchsize可以在prototx文件里设置

test_interval:interval是区间的意思,所有该参数表示:训练的时候,每迭代500次就进行一次测试。

caffe在训练的过程是边训练边测试的。训练过程中每500次迭代(也就是32000个训练样本参与了计算,batchsize为64),计算一次测试误差。计算一次测试误差就需要包含所有的测试图片(这里为10000),这样可以认为在一个epoch里,训练集中的所有样本都遍历以一遍,但测试集的所有样本至少要遍历一次,至于具体要多少次,也许不是整数次,这就要看代码,大致了解下这个过程就可以了。

Caffe提供的示例中,通常有三个文件,solver.prototxt,train_val.prototxt以及deploy.prototxt。从名字也可以知道,solver.prototxt设置求解参数,用于设置训练时的一些全局参数。train_val.prototxt为网络配置文件,是用来训练网络的。deploy.prototxt是用来进行预测的。这两者差别在于deploy.prototxt没有数据层,但是指定了输入的数据形状。
    那当我们训练好了一个模型之后,怎么用train_val.prototxt生成deploy.prototxt呢?如下:
    1. 删除数据层(datalayer),插入数据维度描述
    2.删除损失层(loss)和精度层(accuracy),插入概率层(prob)。
    当然,数据如果训练时数据层涉及到预处理,可以保留对应的预处理层或者直接对图像进行预处理,再输入到网络(一般用这种方法)

时间: 2024-10-24 05:40:33

caffe的一些概念理解的相关文章

学习笔记:Caffe上LeNet模型理解

学习笔记:Caffe上LeNet模型理解 Caffe中用的模型结构是著名的手写体识别模型LeNet-5(http://yann.lecun.com/exdb/lenet/a35.html).当年美国大多数银行就是用它来识别支票上面的手写数字的.能够达到这种商用的地步,它的准确性可想而知,唯一的区别是把其中的sigmoid激活函数换成了ReLU. 为什么换成ReLU,上一篇blog中找到了一些相关讨论,可以参考. CNN的发展,关键就在于,通过卷积(convolution http://deepl

实现HTTPS系列第四弹之【TLS ,SSL等概念理解】

博文说明[前言]: 本文将通过个人口吻介绍TLS ,SSL,PKI等相关知识,在目前时间点[2017年5月21号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 1.第一弹:实现HTTPS系列第一弹之[http,https,www,web等概念简介] 博文链接:http://watchmen.blog.51cto.com/6091957/1922919 2.第二弹:实现HTTPS系列

基本概念理解(二)

基本概念理解 1.bool类型表示真值true和false.可以将算数类型的任何值赋值给bool独享.0值算数类型表示false,任何非0的值都表示true(为什么经常搞反,汗!).也可以直接用false或者true给bool型变量赋值. 2.C++建议每个内置变量都进行初始化.虽然这样做不是必须的,但是会更加容易和安全. 3.和其它变量不同,除非特别说明,在全局作用域中声明的const变量是定义该对象的文件的局部变量.此变量只存在于那个文件中,不能被其它文件访问. 通过指定const变量为ex

计算机网络入门概念理解

计算机网络入门概念理解 下面我来讲解一些关于网络的基础知识,这些知识有利于帮助我们今后学习TCP/IP协议相关知识打好基础. 诞生背景 首先从网络的诞生背景讲起.一开始计算机的运作是独立存在的(独立模式),每个计算机有各自的业务,用户需要在不同的计算机上执行特定的业务逻辑.用户采用卡带的方式将程序和数据输入计算机让计算机进行运算.之后出现了分时系统,分时系统具有"多终端,一主机 "的特点,由于分时系统CPU时间片轮转的特性让用户有了"一人一机"的错觉.70年代后计算

基本概念理解

基本概念理解: 1.编译器:就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序.一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables) 2.集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,

Zigbee 概念理解

1.IEEE802.15.4协议 IEEE802.15.4工作组致力于无线个人区域网络(wireless personal area network, WPAN)的标准化工作,制定的IEEE802.15.4标准规定了WPAN网络的物理层(PHY)和媒体访问层(MAC) 2.ZigBee协议 ZigBee协议由ZigBee Alliance制定. ZigBee协议在IEEE802.15.4标准规定的WPAN网络的物理层(PHY)和媒体访问层(MAC)的基础上又增加了传输层(TL).网络层(NWK)

eeplat开发平台概念理解

最近在学习eeplat的开发,发现当中有很多概念实在让人容易忘记,所以谨以此文记录一笔. eeplat的开发文档里说eeplat是元数据驱动的,这个元数据什么意思,在我理解就是后台的数据库里面的业务表.每个业务都由后台的业务数据库表驱动.比如说我们要管理人员信息,者可以看作是一个业务.那么支撑这个业务的肯定会有一张或好几张数据表,简单的就是一张,比如这个例子.我们会建立一个员工的数据表,里面包括员工的各种信息,包括名字,年龄,编号等等. 其他的概念还有服务,其实就是一些对后台数据的操作,比如 增

Kubernetes重要概念理解

Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernetes的一些基本概念. kubernetes将集群中的机器划分为Master节点和工作节点(Node).其中Master节点上面运行着管理集群的一组进程kube-apiserver.kube-controller-manager,和kube-schedule,还有etcd服务.node作为集群中的工作节

C# Owin初探 概念理解(一)

原文:C# Owin初探 概念理解(一) 本文是阅读网上大牛的文章总结而成. 目录 1.Owin定义 2.为什么要用Owin 3.作用 4.总结 1.Owin定义 Owin是Open Web Interface For .NET.也就是.Net开源的web接口,听起来口气有点大,值得我们下面深入了解. 2.为什么要用Owin 百度百科的CV大法 过去,IIS作为.NET开发者来说是最常用的Web Server(没有之一),源于微软产品的紧耦合关系,我们不得不将Website.Web Applic