zoukankan      html  css  js  c++  java
  • Torch-RNN运行过程中的坑 [0](一些基础概念)

    0、Lua & LuaJIT简介

    Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

    Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发,Lua在葡萄牙语里代表美丽的月亮。

    Lua的特性:

    • 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
    • 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
    • 其它特性:
      • 支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
      • 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;(此处有坑,详见文章第三节链接)
      • 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
      • 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

    LuaJIT (Lua Just In Time)是采用 C 和汇编语言编写的 Lua 解释器与即时编译器。即时编译(Just-in Time)技术把 Lua 代码编译成本地机器码后交由 CPU 直接执行。

    LuaJIT 2 的测评报告表明,在数值运算、循环与函数调用、协程切换、字符串操作等许多方面它的加速效果都很显著。凭借着 FFI 特性,LuaJIT 2 在那些需要频繁地调用外部 C/C++ 代码的场景,也要比标准 Lua 解释器快很多。目前 LuaJIT 2 已经支持包括 i386、x86_64、ARM、PowerPC 以及 MIPS 等多种不同的体系结构。

    ---------------------------------------------------------------------

    为什么要说LuaJIT呢?我们要开发cocos2d游戏吗?还是要开发C底层的Mysql插件呢?。。。都不是。。。

    1、Torch简介

    Torch是一个由Lua语言开发的深度学习框架,很好地支持机器学习算法,优先兼容GPU(CUDA/OpenCL),官方表示“easy to use and efficient”、“amazing”来表示其碉堡了。是LuaJIT编写的,LuaJIT底层是C和CUDA~

    ---------------------------------------------------------------------

    为什么Torch选了半天实现语言,最终选了Lua呢?可以说很重要的原因就是Lua可以很方便的集成C/C++的各种库的脚本语言。比如CUDA/OpenCL等都是C实现的。第二呢,Lua也是有自己的包管理器Luarocks,安装起来也很是“easy to use”。

    2、Torch repo: RNN-Torch

    当然首先得力荐 Stanford 的 Karpathy 的 char-rnn repo,开创了字符级别的RNN生成思路。这里特地再次post一次 Karpathy 的 LSTM 讲解链接《The Unreasonable Effectiveness of Recurrent Neural Networks》 和另一个神 colah 的LSTM通俗讲解 Understanding LSTM Networks

    网上的汪峰作词机奥巴马演讲稿自动生成器等都是基于这个 repo 改的。我们这次用升级版,是他的校友 Justin Johnson (neural-style 也是他写的,看来是个torch派)的优化版本,名字叫 torch-rnn ,试用 Torch7 实现,较 Lua 实现的 char-rnn 版本效率更高。

    ---------------------------------------------------------------------

    废话不多说了,在运行中文的过程中,碰到了一些问题。具体我们分两篇文章描述:

    [1] Torch-RNN运行过程中的坑 [1](读取Lua非空table,size为0)

    [2] Torch-RNN运行过程中的坑 [2](Lua的string sub函数,读取中文失败,乱码?)

    999、参考链接

  • 相关阅读:
    剑指offer_24:二叉树中和为某一值的路径
    剑指offer_23:二叉搜索树的后序遍历序列
    Java基础类型大小
    旋转数组
    剑指offer_22:从上往下打印二叉树
    剑指offer_21:栈的压入、弹出序列
    剑指offer_20:包含min函数的栈
    剑指offer_19:顺时针打印矩阵
    剑指offer_18:二叉树的镜像
    redis jedis源码
  • 原文地址:https://www.cnblogs.com/zklidd/p/6104730.html
Copyright © 2011-2022 走看看