Fork me on GitHub

深度学习| 深度学习框架介绍与应用

 

  • 图像的一般问题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

主要特点

 

 

 简单入门:高速计算

 

 自动求导

 

 基本概念:

 

 

 

posted @   kris12  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
levels of contents
点击右上角即可分享
微信分享提示