热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Caffe入门(训练mnist)

使用caffe训练模型只需要以下几个步骤:(1)准备好数据;(2)写好模型配置文件;(3)写好优化配置文件;(4)命令行执行;这样就可以得到训练的模型.caffemodel文件了1

使用caffe训练模型只需要以下几个步骤:

(1)准备好数据;

(2)写好模型配置文件;

(3)写好优化配置文件;

(4)命令行执行;

这样就可以得到训练的模型.caffemodel文件了


1.caffe的下载与安装:

(1)下载

(2)安装

(3)caffe的下载与安装以及一些基本的介绍官网已经描述地比较详细,这里不再重复;

2.caffe的使用接口有命令行,python跟matlab,个人觉得训练模型的时候使用命令行已经足够简单了,至于训练好的模型可以使用python与matlab的接口进行调用,本文先描述基于命令行的模型训练,以LeNet模型为例;

LeNet模型

Caffe 入门(训练mnist)

PS:LeNet是手写数字库MNIST上应用比较经典的模型,具有7层网络结构,分别是卷积-下采样-卷积-下采样-全连-全连-分类层,具体网络细节可以参考文章:

Gradient based learning applied to document recognition

1.安装编译完caffe后,其主目录下有:

Caffe 入门(训练mnist)

2.训练模型之前需要先准备好训练数据MNIST,执行以下命令可以下载MNIST数据库:

Caffe 入门(训练mnist)

3.由于caffe支持的数据类型不包括图像类型,所以常规做法需要将图像类型转为lmdb类型:

Caffe 入门(训练mnist)

4.准备好数据之后,我们需要定义我们的网络模型,在caffe中是通过.prototxt配置文件来定义的,执行以下命令:

Caffe 入门(训练mnist)

可以看到各个网络层是如何定义的:

(1)输入层(数据层):

[plain] view plain copy
  1. layer {  
  2.   name: "mnist"      //表示层名  
  3.   type: "Data"       //表示层的类型  
  4.   top: "data"          
  5.   top: "label"  
  6.   include {  
  7.     phase: TRAIN      //表示仅在训练阶段起作用  
  8.   }  
  9.   transform_param {  
  10.     scale: 0.00390625  //将图像像素值归一化  
  11.   }  
  12.   data_param {  
  13.     source: "examples/mnist/mnist_train_lmdb"   //数据来源  
  14.     batch_size: 64                              //训练时每个迭代的输入样本数量  
  15.     backend: LMDB                               //数据类型  
  16.   }  
  17. }  
(2)卷积层:

[plain] view plain copy
  1. layer {  
  2.   name: "conv1"  
  3.   type: "Convolution"  
  4.   bottom: "data"               //输入是data  
  5.   top: "conv1"                 //输出是卷积特征  
  6.   param {  
  7.     lr_mult: 1                 //权重参数w的学习率倍数  
  8.   }  
  9.   param {  
  10.     lr_mult: 2                 //偏置参数b的学习率倍数  
  11.   }  
  12.   convolution_param {  
  13.     num_output: 20  
  14.     kernel_size: 5  
  15.     stride: 1  
  16.     weight_filler {           //权重参数w的初始化方案,使用xavier算法  
  17.       type: "xavier"  
  18.     }  
  19.     bias_filler {  
  20.       type: "constant"       //偏置参数b初始化化为常数,一般为0  
  21.     }  
  22.   }  
  23. }  

(3)下采样层(pool):

[plain] view plain copy
  1. layer {  
  2.   name: "pool1"  
  3.   type: "Pooling"  
  4.   bottom: "conv1"  
  5.   top: "pool1"  
  6.   pooling_param {  
  7.     pool: MAX  
  8.     kernel_size: 2  
  9.     stride: 2  
  10.   }  
  11. }  

(4)全连层:

[plain] view plain copy
  1. layer {  
  2.   name: "ip1"  
  3.   type: "InnerProduct"  
  4.   bottom: "pool2"  
  5.   top: "ip1"  
  6.   param {  
  7.     lr_mult: 1  
  8.   }  
  9.   param {  
  10.     lr_mult: 2  
  11.   }  
  12.   inner_product_param {  
  13.     num_output: 500  
  14.     weight_filler {  
  15.       type: "xavier"  
  16.     }  
  17.     bias_filler {  
  18.       type: "constant"  
  19.     }  
  20.   }  
  21. }  
(5)非线性层:

[plain] view plain copy
  1. layer {  
  2.   name: "relu1"  
  3.   type: "ReLU"  
  4.   bottom: "ip1"  
  5.   top: "ip1"  
  6. }  
(6)准确率层(计算准确率):

[plain] view plain copy
  1. layer {  
  2.   name: "accuracy"  
  3.   type: "Accuracy"  
  4.   bottom: "ip2"  
  5.   bottom: "label"  
  6.   top: "accuracy"  
  7.   include {  
  8.     phase: TEST  
  9.   }  
  10. }  
(7)损失估计层:

[plain] view plain copy
  1. layer {  
  2.   name: "loss"  
  3.   type: "SoftmaxWithLoss"  
  4.   bottom: "ip2"  
  5.   bottom: "label"  
  6.   top: "loss"  
  7. }  

5.定义完网络模型,还需要配置关于模型优化的文件:

Caffe 入门(训练mnist)

配置文件如下:

[plain] view plain copy
  1. # The train/test net protocol buffer definition  
  2. net: "examples/mnist/lenet_train_test.prototxt"     //设定网络模型配置文件的路径  
  3. # test_iter specifies how many forward passes the test should carry out.  
  4. # In the case of MNIST, we have test batch size 100 and 100 test iterations,  
  5. # covering the full 10,000 testing images.  
  6. test_iter: 100  
  7. # Carry out testing every 500 training iterations.  
  8. test_interval: 500                               
  9. # The base learning rate, momentum and the weight decay of the network.  
  10. base_lr: 0.01  
  11. momentum: 0.9  
  12. weight_decay: 0.0005  
  13. # The learning rate policy  
  14. lr_policy: "inv"  
  15. gamma: 0.0001  
  16. power: 0.75  
  17. # Display every 100 iterations  
  18. display: 100  
  19. # The maximum number of iterations  
  20. max_iter: 10000  
  21. # snapshot intermediate results  
  22. snapshot: 5000  
  23. snapshot_prefix: "examples/mnist/lenet"  
  24. # solver mode: CPU or GPU  
  25. solver_mode: GPU  

6.接下来一步就是进行训练了,直接执行命令就可以:

Caffe 入门(训练mnist)

执行后可以看到:首先会读取配置文件初始化网络跟优化器:

Caffe 入门(训练mnist)

紧接着开始优化:

Caffe 入门(训练mnist)

可以看到训练过程中每100次迭代就会显示一个loss,每500次迭代就会计算一次test准确率,总共10000次迭代,这些都可以在配置文件中设置;

7.训练完之后的模型就保存在.caffemodel文件中,该文件可以被c,python,matlab等调用;



推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
mobiledu2502869223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有