TensorFlow in Julia(Ziyang) ========================================================== TensorFlow.jl 简介 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 虽然 Julia 是一门非常优秀的语言,但是目前 TensorFlow 并不直接支持 Julia 。如果有需要,你可以选择 TensorFlow.jl , 这是一个由 `malmaud `_ 封装的第三方 Julia 包。它有和 Python 版本类似的 API ,也能支持 GPU 加速。 为什么要使用 Julia ? --------------------------------------------- 先进的语法糖,让你能简明扼要的表述计算过程。而高性能的 JIT ,提供了媲美静态语言的速度(这一点是在数据预处理中非常重要,但也是 Python 难以企及的)。 所以,使用 Julia ,写的快,跑的更快。 (你可以通过 `这个视频 `_ 了解更多) 本章我们将基于 TensorFlow.jl 0.12,向大家简要介绍 Tensorflow 在 Julia 下的使用. 你可以参考最新的 `TensorFlow.jl 文档 `_. TensorFlow.jl 环境配置 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 在 docker 中快速体验 TensorFlow.jl -------------------------------------------- 在本机已有 docker 环境的情况下,使用预装 TensorFlow.jl 的 docker image 是非常方便的。 在命令行中执行 ``docker run -it malmaud/julia:tf`` ,然后就可以获得一个已经安装好 TensorFlow.jl 的 Julia REPL 环境。 (如果你不想直接打开 Julia,请在执行 ``docker run -it malmaud/julia:tf /bin/bash`` 来打开一个bash终端. 如需执行您需要的jl代码文件,可以使用 docker 的目录映射) 在 julia 包管理器中安装 TensorFlow.jl -------------------------------------------- 在命令行中执行 ``julia`` 进入 Julia REPL 环境,然后执行以下命令安装 TensorFlow.jl .. code-block:: julia using pkg Pkg.add("TensorFlow") TensorFlow.jl 基础使用 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: julia using TensorFlow # 定义一个 Session sess = TensorFlow.Session() # 定义一个常量和变量 x = TensorFlow.constant([1]) y = TensorFlow.Variable([2]) # 定义一个计算 w = x + y # 执行计算过程 run(sess, TensorFlow.global_variables_initializer()) res = run(sess, w) # 输出结果 println(res) MNIST数字分类 --------------------------------------------- 这个例子来自于 `TensorFlow.jl 文档 `_ ,可以用于对比 python 版本的 API. .. code-block:: julia # 使用自带例子中的 mnist_loader.jl 加载数据 include(Pkg.dir("TensorFlow", "examples", "mnist_loader.jl")) loader = DataLoader() # 定义一个 Session using TensorFlow sess = Session() # 构建 softmax 回归模型 x = placeholder(Float32) y_ = placeholder(Float32) W = Variable(zeros(Float32, 784, 10)) b = Variable(zeros(Float32, 10)) run(sess, global_variables_initializer()) # 预测类和损失函数 y = nn.softmax(x*W + b) cross_entropy = reduce_mean(-reduce_sum(y_ .* log(y), axis=[2])) # 开始训练模型 train_step = train.minimize(train.GradientDescentOptimizer(.00001), cross_entropy) for i in 1:1000 batch = next_batch(loader, 100) run(sess, train_step, Dict(x=>batch[1], y_=>batch[2])) end # 查看结果并评估模型 correct_prediction = indmax(y, 2) .== indmax(y_, 2) accuracy=reduce_mean(cast(correct_prediction, Float32)) testx, testy = load_test_set() println(run(sess, accuracy, Dict(x=>testx, y_=>testy)))