利用GPU和Caffe训练神经网络
ztj100 2025-04-26 22:41 7 浏览 0 评论
【编者按】本文为利用GPU和Caffe训练神经网络的实战教程,介绍了根据Kaggle的“奥托集团产品分类挑战赛”的数据进行训练一种多层前馈网络模型的方法,如何将模型应用于新数据,以及如何将网络图和训练权值可视化。
Caffe是由贾扬清发起的一个开源深度学习框架,它允许你利用你的GPU训练神经网络。相对于其他的深度学习框架如Theano或Torch等,Caffe不需要你自己编写算法程序,你只需要通过配置文件来指定网络。显然,这种做法比自己编写所有程序更加节省时间,也将你限制在一定的框架范围内。不过,在大多数情况下,这没有太大的问题,因为Caffe提供的框架相当强大,并且不断进步。
这篇文章的主题由一种多层前馈网络组成。该模型将根据Kaggle的“奥托集团产品分类挑战赛”的数据进行训练。我们还关注将模型应用于新数据,以及如何将网络图(network graph)和训练得到的权值可视化。限于篇幅,本文不会解释所有的细节。另外,简单的代码比一千多字的话更有说服力。相对于对照IPython Notebook来程序化细节,本文将着重描述观念以及一些我遇到的绊脚石。
设置
如果你还没有把Caffe安装在你的系统上,我建议在一个允许GPU处理的EC2实例上工作,例如g2.2xlarge实例。有关如何使用EC2工作的介绍可以查看Guide to EC2 from the Command Line,设置Caffe及其准备工作可以参考GPU Powered Deep Learning with NVIDIA DIGITS on EC2。对于使用Caffe,我也建议你在你的实例上安装IPython Notebook——在这里可以找到教程。
定义模型和元参数
一个模型及其应用的训练至少需要三个配置文件。这些配置文件的格式遵循界面描述语言,称为协议缓冲区(protocol buffers)。它表面上类似于JSON,但却又显著不同,实际上应该在需要进行验证(通过自定义模式的方式——像Caffe的这个这样)和序列化的数据文档中取代它。
为了训练,你必须有一个prototxt文件保持训练的元参数(config.prototxt)以及一个模型用于定义网络图形(model_train_test.prototxt)——以非周期和定向的方式连接各层。需要注意的是,数据从底部流向到顶部时伴随着关于怎样指定层的顺序。这里的示例网络有五个层次:
数据层(一个用于训练,一个用于测试)
内积层(权值Ⅰ)
ReLUs(隐含层)
内积层(权值Ⅱ)
输出层(用于分类的Soft Max)
A,Soft Max层给出损失 B,准确性层——允许我们看到网络如何在训练的同时提升。
以下从model_train_test.prototxt的摘录显示层(4)和(5A):
[...] layer { name: "ip2" type: "InnerProduct" bottom: "ip1" top: "ip2" inner_product_param { num_output: 9 weight_filler { type: "xavier" } bias_filler { type: "constant" value: 0 } } } layer { name: "accuracy" type: "Accuracy" bottom: "ip2" bottom: "label" top: "accuracy" include { phase: TEST } } [...]
第三个prototxt文件(model_prod.prototxt)指定应用于它的网络。在这种情况下,它与训练规范大体上是一致的——但它缺乏数据层(因为我们不从产品的数据源中读取数据)并且Soft Max层不会产生损耗值但有分类的可能。另外,准确性层现在已经没有了。还要注意的是,我们现在在开始指定输入尺寸(如预期:1,93,1,1)——它是肯定混乱的,所有四个尺寸被称为input_dim,只有顺序定义哪个是哪个,并没有指定明确的背景。
支持的数据源
这是开始尝试使用Caffe时要克服的首要心理障碍之一。它不像使用一些CSV来提供Caffe可执行的方式那样简单。实际上,对于没有图像的数据,你有三种选择。
LMDB(闪电内存映射数据库)
LevelDB
HDF5格式
HDF5可能是最容易使用的,因为你只需要采用HDF5格式把数据集存储到文件中。LMDB和LevelDB是数据库,所以你必须按照他们的协议。HDF5格式存储数据集的大小会被内存限制,这就是为什么我抛弃它的原因。LMDB和LevelDB之间的选择是相当随便的——从我掠过的资源来看,LMDB似乎更强大,速度更快,更成熟。然后从GitHub来看,LevelDB的维护似乎更积极,也具有较大的Google和StackOverflow的足迹。
Blobs和Datums
Caffe内部使用一个叫做Blobs的数据结构进行工作,它用于正向传递数据和反向渐变。这是一个四维数组,其四个维度被称为:
N或batch_size
通道
高度
宽度
这与我们有关,因为在把它存储到LMDB之前我们必须按照结构塑造我们的案例——从它被送到Caffe的地方。图像的形状是直观的,一批次64个按规定的100×200 RGB像素的图像将最终作为形阵列(64,3,200,100)。对于一批64个特征矢量,每个长度93的Blob的形状为(64,93,1,1)。
在将数据加载到LMDB时,你可以看到个别案例或特征向量存储在Datum的对象上。整型数据被存储在(字节串格式)data中,浮点型数据存储在float_data中。一开始我犯错将浮点型数据分配到data中,从而导致该模型不学习任何东西。在将Datum存储到LMDB之前,你需要将对象序列化成一个字节的字符串表示。
总结
对我来说,掌握Caffe是一个令人惊讶的非线性体验。也就是说,要深刻理解这个系统,还没有任何的切入点和持续的学习路径。让Caffe对你发挥作用的有效信息,分布在很多不同的教程,GitHub上的源代码,IPython Notebook以及论坛主题。这就是为什么我花时间撰写本教程及相关的代码。在我将学到的知识总结形成文本之后,我自己都要从头读一下。
我认为Caffe有一个光明的未来——只要添加新的功能,它将不仅仅是水平的增长,而且会垂直的重构和改善所有用户的体验。这绝对是高性能深度学习的好工具。如果你想要做图像处理和卷积神经网络,我建议你看看NVIDIA DIGITS,它会为你提供一个舒适的GUI来实现目标。
- 上一篇:2016年1月彩妆记录
- 下一篇:万字总结编译利器CMake,从入门到项目实战演练
相关推荐
- 30天学会Python编程:16. Python常用标准库使用教程
-
16.1collections模块16.1.1高级数据结构16.1.2示例...
- 强烈推荐!Python 这个宝藏库 re 正则匹配
-
Python的re模块(RegularExpression正则表达式)提供各种正则表达式的匹配操作。...
- Python爬虫中正则表达式的用法,只讲如何应用,不讲原理
-
Python爬虫:正则的用法(非原理)。大家好,这节课给大家讲正则的实际用法,不讲原理,通俗易懂的讲如何用正则抓取内容。·导入re库,这里是需要从html这段字符串中提取出中间的那几个文字。实例一个对...
- Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)
-
实现功能:Python数据分析实战-利用正则表达式提取文本中的URL网址和邮箱...
- python爬虫教程之爬取当当网 Top 500 本五星好评书籍
-
我们使用requests和re来写一个爬虫作为一个爱看书的你(说的跟真的似的)怎么能发现好书呢?所以我们爬取当当网的前500本好五星评书籍怎么样?ok接下来就是学习python的正确姿...
- 深入理解re模块:Python中的正则表达式神器解析
-
在Python中,"re"是一个强大的模块,用于处理正则表达式(regularexpressions)。正则表达式是一种强大的文本模式匹配工具,用于在字符串中查找、替换或提取特定模式...
- 如何使用正则表达式和 Python 匹配不以模式开头的字符串
-
需要在Python中使用正则表达式来匹配不以给定模式开头的字符串吗?如果是这样,你可以使用下面的语法来查找所有的字符串,除了那些不以https开始的字符串。r"^(?!https).*&...
- 先Mark后用!8分钟读懂 Python 性能优化
-
从本文总结了Python开发时,遇到的性能优化问题的定位和解决。概述:性能优化的原则——优化需要优化的部分。性能优化的一般步骤:首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它...
- Python“三步”即可爬取,毋庸置疑
-
声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块importreimportrequests#第二步获取你想爬取的网页地址,发送请求,获取网页内...
- 简单学Python——re库(正则表达式)2(split、findall、和sub)
-
1、split():分割字符串,返回列表语法:re.split('分隔符','目标字符串')例如:importrere.split(',','...
- Lavazza拉瓦萨再度牵手上海大师赛
-
阅读此文前,麻烦您点击一下“关注”,方便您进行讨论和分享。Lavazza拉瓦萨再度牵手上海大师赛标题:2024上海大师赛:网球与咖啡的浪漫邂逅在2024年的上海劳力士大师赛上,拉瓦萨咖啡再次成为官...
- ArkUI-X构建Android平台AAR及使用
-
本教程主要讲述如何利用ArkUI-XSDK完成AndroidAAR开发,实现基于ArkTS的声明式开发范式在android平台显示。包括:1.跨平台Library工程开发介绍...
- Deepseek写歌详细教程(怎样用deepseek写歌功能)
-
以下为结合DeepSeek及相关工具实现AI写歌的详细教程,涵盖作词、作曲、演唱全流程:一、核心流程三步法1.AI生成歌词-打开DeepSeek(网页/APP/API),使用结构化提示词生成歌词:...
- “AI说唱解说影视”走红,“零基础入行”靠谱吗?本报记者实测
-
“手里翻找冻鱼,精心的布局;老漠却不言语,脸上带笑意……”《狂飙》剧情被写成歌词,再配上“科目三”背景音乐的演唱,这段1分钟30秒的视频受到了无数网友的点赞。最近一段时间随着AI技术的发展,说唱解说影...
- AI音乐制作神器揭秘!3款工具让你秒变高手
-
在音乐创作的领域里,每个人都有一颗想要成为大师的心。但是面对复杂的乐理知识和繁复的制作过程,许多人的热情被一点点消磨。...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 30天学会Python编程:16. Python常用标准库使用教程
- 强烈推荐!Python 这个宝藏库 re 正则匹配
- Python爬虫中正则表达式的用法,只讲如何应用,不讲原理
- Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)
- python爬虫教程之爬取当当网 Top 500 本五星好评书籍
- 深入理解re模块:Python中的正则表达式神器解析
- 如何使用正则表达式和 Python 匹配不以模式开头的字符串
- 先Mark后用!8分钟读懂 Python 性能优化
- Python“三步”即可爬取,毋庸置疑
- 简单学Python——re库(正则表达式)2(split、findall、和sub)
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)