zoukankan      html  css  js  c++  java
  • 利用 TFLearn 快速搭建经典深度学习模型

    利用 TFLearn 快速搭建经典深度学习模型

    利用 TFLearn 快速搭建经典深度学习模型


    使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章《TensorFlow 增加自定义运算符》)。由于运算符的粒度较小,在构建深度学习模型时,代码写出来比较冗长,比如实现卷积层:5, 9

    这种方式在设计较大模型时会比较麻烦,需要程序员徒手完成各个运算符之间的连接,像一些中间变量的维度变换、运算符参数选项、多个子网络连接处极易发生问题,肉眼检查也很难发现代码中潜伏的 bug,会导致运行时出错(运气好),或者运行时不出错但运行结果不可解释(运气不好),消耗大量时间和精力。

    有没有更好的实现各种经典模型的方式?

    答案是肯定的!

    我们今天学习一下在 TensorFlow 之上构建的高层次 API—— TFLearn【2】。

    TFLearn 是一个模块化和透明的深度学习库,构建在 TensorFlow 之上。

    它为 TensorFlow 提供高层次 API,目的是便于快速搭建试验环境,同时保持对 TensorFlow 的完全透明和兼容性。


    TFLearn 的一些特点:

    • 容易使用和易于理解的高层次 API 用于实现深度神经网络,附带教程和例子;

    • 通过高度模块化的内置神经网络层、正则化器、优化器等进行快速原型设计;

    • 对 TensorFlow 完全透明,所有函数都是基于 tensor,可以独立于 TFLearn 使用;

    • 强大的辅助函数,训练任意 TensorFlow 图,支持多输入、多输出和优化器;

    • 简单而美观的图可视化,关于权值、梯度、特征图等细节;

    • 无需人工干预,可使用多 CPU、多 GPU;

    • 高层次 API 目前支持最近大多数深度学习模型,像卷积网络、LSTM、BiRNN、BatchNorm、PReLU、残差网络、生成网络、增强学习…… 将来会一直更新最近的深度学习技术;

    心动不如行动,我们马上就体验!在一台已经安装了 TensorFlow 的机器上(安装步骤参考之前文章《TensorFlow 1.0.0rc1 入坑记》《利用 TensorFlow 集装箱快速搭建交互式开发环境》《如何在 Windows 系统玩 TensorFlow》)直接运行以下命令:pip in

    检查安装成功:

    为了方便运行 TFLearn 附带例程,我们需要克隆 TFLearn 源码:h

    先看看如何用 TFLearn 实现 AlexNet 用于 Oxford 17 类鲜花数据集分类任务的:

    上图为论文【1】 中的 AlexNet 结构。

    TFLearn 例程中实现的 AlexNet 和论文【1】中相比做了一些修改:

    • 输入图像尺寸变为 227 x 227;

    • 将 2-tower 架构改为 single-tower;

    • 最后一个分类层的输出类别数从 1000 变为 17;

    运行该例程:

    该程序会自动下载 Oxford 17 flowers 数据集, 选了几个不同类别图片如下:

    运行 AlexNet 模型训练截图如下:

    在另一个命令行窗口启动 TensorBoard:

    打开浏览器,输入地址:localhost:6006,打开 TensorBoard 页面,查看训练过程的准确率、loss 值变化:

    AlexNet 模型可视化(之一)

    (之二)

    模型权值分布:

    模型权值的直方图,可以看出权值训练历史:

    通过今天内容,读者可以看出使用 TFLearn 高层次 API 相比直接使用 TensorFlow 实现深度学习模型具有使用更简单、构建更快速、可视化更方便等特点,从此无需手动处理各个运算符之间的连接,解放了生产力,提高了模型设计和优化效率。

    作为练习,读者可以进一步学习 TFLearn 实现其他经典深度学习模型如 VGG、Inception、NIN、ResNet 等,对比原始论文学习,相信会有更大的收获。

    参考文献

    【1】Alex Krizhevsky, Ilya Sutskever & Geoffrey E. Hinton. ImageNet Classification with Deep Convolutional Neural Networks. NIPS, 2012.

    【2】 

  • 相关阅读:
    IEnumerable、IEnumerator接口(如何增加迭代器功能)
    IConvertible接口
    IComparable和IComparer接口
    c#-泛型、协变、逆变
    MVC-HtmlHelper扩展
    .Net反射-TypeDescriptor
    MVC Core 使用TagHelper扩展几个插件
    js日志组件封装
    js预解析
    js代码优化
  • 原文地址:https://www.cnblogs.com/alexanderkun/p/6918381.html
Copyright © 2011-2022 走看看