深度学习| 深度学习框架介绍与应用
- 图像的一般问题Caffe很方便,是目前产品化最多的库;
- 多关注TensorFlow,社区发达资源多;
- 可以关注Facebook的Pytorch + caffe2,研究+产品应用组合;
- MxNet对显存利用率很高,而且Amazon也大力支持;
Caffe
- 来源于Berkeley的开源框架
- 高效、一般的训练无需手写大量代码
- 有python和mathlab的接口
- 对于卷积神经网络的训练和fine-tuning非常方便
Speed with krizhevsky's 2012 model:
- K40/Titan: 2ms / image, K20: 2.6ms
- Caffe + cuDNN: 1.17ms / image on K40
- 60 million images / day
- 8-core CPU: ~20 ms/image
1. caffe安装
Ubuntu 14.04+的请参考教程
https://www.zybuluo.com/hanxiaoyang/note/364737
CentOS7.0的请参考教程
https://www.zybuluo.com/hanxiaoyang/note/364680
Mac的可以参考
https://www.zybuluo.com/hanxiaoyang/note/370344
2. caffe的使用方法
这种训练方式不用写代码
①Resize图片,转换存储格式(LMDB/ LevelDB)(二进制的存储读写效率是非常高的)
②定义网络结构(编辑prototxt)
③定义solver(编辑另一个prototxt)
④一行命令开始训练(可以基于已有的权重赋值)
第一步:转化格式
- DataLayer reading from LMDB is the easiest
- Create LMDB using convert imageset
- Need text file where each line is (“[path /to image.jpeg] [label]”)
- Create HDF5 file yourself using h5py
第二步:定义层次结构
1/255=0.00390625
第三步:定义solver
定义和训练相关的信息
第四步:训练
模型库首选model zoo
关于fine-tuning
如果层次不变,只需修改输入输出
如果层次改变,添加/ 删减层次
fine-tuning技巧/ 注意点
优先学习权放在新加层
- 每一层都有控制学习率的参数:blobs_lr ;
- 一般会把前面层学习率调低,最后新加层调高;
- 你甚至可以freeze前面的层次不动;
- 一般fine-tuning的前期loss下降非常快,中间有个瓶颈期,要有耐心;
在solver处调整学习率
- 调低solver处的学习率(1/10,1/100);
- 记住存储一下中间结果,以免出现意外;
3. Pycaffe
Import caffe加载库
- caffe.net 是加载/ 运行/ 训练模型的主类(接口)
- caffe.Classifier和caffe.Detector是针对识别/ 检测的接口
- caffe.SGDSolver最优化
- caffe.io负责输入输出和预处理
- caffe.draw可以画出网络结构图
加载所需库
- import numpy as np
- import matplotlib.pyplot as plt
- from PIL import Image
- import caffe
选择GPU或者CPU
- #使用cpu
- caffe.set_mode_cpu()
- #使用gpu
- caffe.set_device(0)
- caffe.set_mode_gpu()
4. Pycaffe训练
定义网络结构
载入solver
Solver训练
5. Pycaffe 用CNN抽取特征
做完前向运算取出某层输出
更详细的流程可以参考:https://github.com/HanXiaoyang/image_retrieval/blob/master/compute_fea_for_image_retrieval.py
Pycaffe 图像识别
你在conv.prototxt中定义好了卷积层如左下
TensorFlow
Computation graph VS layer based
计算模型
- 首先构造好整个计算链路;
- 可以对链路进行优化;
- 分布式调度;
基于层模型
- 每个层的计算,固定实现forward/ backward ;
- 必须手动指定目标GPU卡;
TensorFlow的一些概念
在TensorFlow里:
- 使用张量(tensor)表示数据;
- 使用图(graph)来表示计算任务;
- 在被称之为会话(Session)的上下文(context)中执行图;
- 通过变量(Variable)维护状态;
- 使用feed和fetch可以为任意的操作(arbitrary operation)赋值或者从其中获取数据;
关于张量(tensor)
张量可以用多维数组来表示
Numpy VS Tensorflow
Tensorflow需要显示地输出tensor(借助eval())
Tensorflow的“计算图”
Tensorflow一般可分为2部分
- 构造部分,包含计算流图;
- 执行部分,通过session来执行图中的计算;
构建图
- 创建源节点(source op);
- 源节点输出传递给其他节点(op)做运算;
TF默认图
- TensorFlow Python库有一个默认图(default graph)
- 节点构造器(op构造器)可以增加节点;
看一个TF示例
- 2个constant()节点
- 1个manmul()节点
真实的计算要用到session,马上来
通过TF中的session执行真的操作
Session对象在使用完成后,记得关闭以释放资源;
我们会用到变量(variables)来保存参数W
注意到tf.initialize_all_variables,我们要预先对变量初始化(initialization)
TF中一个计算图的状态变更过程
关于多GPU/ CPU
用with ... device语句用来指派特定的CPU或GPU操作
总结下
TensorBoard可视化
PyTorch
主要特点
简单入门:高速计算
自动求导
基本概念:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人