📜  Julia 深度学习简介

📅  最后修改于: 2022-05-13 01:55:45.522000             🧑  作者: Mango

Julia 深度学习简介

数据科学的一个新转变是 Julia,因为它快速且易于学习和使用。 Julia 是一种很有前途的语言,主要集中在科学计算领域。它提供了可与 C/C++ 相媲美的良好执行速度。它还支持并行性。 Julia 非常适合在深度学习中编写代码,因为深度学习框架主要在后端使用 C++(性能很重要),在前端使用Python (易用性)。并行性在编写非平凡的深度学习代码中起着重要作用。它确保语法类似于 MATLAB,许多编码人员都可以过渡到该语法。

Julia 的主要深度学习库是 Flux.jl。 PyTorch 或 TensorFlow 是用 C++ 或 Cuda 编写的,以获得良好的 CPU 性能。但是,如果我们想为实验目的编写自定义代码,这里就会变得很困难。因此,在这个 Julia 中为我们提供了一些自定义损失函数。

包和数据集

我们将导入 Flux、Statistics 和 MLDatasets。

该模型:

model = Chain(
   
   # 28x28 => 14x14
   Conv((5, 5), 1=>8, pad=2, stride=2, relu),
   
   # 14x14 => 7x7
   Conv((3, 3), 8=>16, pad=1, stride=2, relu),
   
   # 7x7 => 4x4
   Conv((3, 3), 16=>32, pad=1, stride=2, relu),
   
   # 4x4 => 2x2
   Conv((3, 3), 32=>32, pad=1, stride=2, relu),
   
   # Width x height feature map average pooling 
   GlobalMeanPool(),
   flatten,
   
   Dense(32, 10),
   softmax)

现在,我们可以使用onecold()函数来解码预测

# Fetching the predictions
y = model(x_train)

# Decode the predictions
y = onecold(y)
println("Predict my Image1: $(y[1])")

训练模型:

number_epochs = 10
@epochs number_epochs Flux.train!(loss, ps, train_data, opt)
accuracy(model(x_train), y_train)

@epochs-要执行的次数。

Julia 的最佳框架

根据用户的需要,可以使用多个框架在 Julia 上工作。一些最常用的框架是:

通量

它是一个深度学习和机器学习库。它提供了一种单一且直观的方式来定义模型,就像数学符号一样。现有的 Julia 库是可区分的,它们可以直接合并到 Flux 模型中。

摩卡.jl

  1. 它是 Julia 的深度学习库。
  2. Mocha.jl 完全是为 Julia 编写的。该库考虑了 Julia 接口,它能够与核心 Julia 功能和包进行交互。
  3. 该库包含在后端使用 Julia 的最小依赖项。不需要 root 权限或安装任何外部依赖项。
  4. 促进模块化和正确性

Knet 是一个深度学习框架。它在 Julia 中实现。 Knet 允许用普通的 Julia 描述他们的前向计算。它允许使用条件、循环、递归、元组、闭包、字典、数组索引、连接和高级语言特性。该库支持 GPU 操作并使用动态计算图自动区分以普通 Julia 定义的模型。

Knet 文档有处理主要深度学习构建块的详细说明,其中一些如下所列:

  1. 反向传播
  2. 卷积神经网络
  3. 循环神经网络
  4. 强化学习

TensorFlow.jl

TensorFlow.jl 也是流行的开源机器学习 TensorFlow 的 Julia 包装器。该包装器可用于各种目的,例如快速摄取数据,尤其是不常见格式的数据,快速对推理结果进行后处理,例如计算各种统计数据和没有固定矢量化实现的可视化。

ScikitLearn.jl

ScikitLearn.jl 是流行的Python库 Scikit-learn 的 Julia 包装器。它在 Julia 中实现了 Scikit-learn 接口和算法。它为训练和使用模型提供了一个统一的界面,以及一组用于链接(管道)、评估和调整模型超参数的工具。它支持来自 Julia 生态系统和 Scikit-learn 库的模型。

ScikitLearn.jl 的主要特点如下:

  1. 支持数据帧
  2. 超参数调优
  3. 特征联合和管道
  4. 交叉验证

MXNet.jl

MXNet.jl 是 Apache MXNet Julia 包,它为 Julia 带来了灵活高效的 GPU 计算和最先进的深度学习。该库的功能包括跨多个设备(包括多个 CPU、GPU 和分布式服务器节点)的高效张量和矩阵计算。它还具有灵活的符号操作来组合和构建最先进的深度学习模型。

MLBase.jl

MLBase.jl 是一个 Julia 包,它为机器学习应用程序提供有用的工具。它提供了一系列有用的工具来支持机器学习程序,包括数据操作和预处理、基于分数的分类、性能评估、交叉验证和模型调整。

MLBase.jl 可用于以下任务:

  1. 预处理和数据操作
  2. 绩效评估
  3. 交叉验证
  4. 模型调整

梅林

Merlin 是一个用 Julia 编写的深度学习框架。该库旨在为机器学习提供一个快速、灵活、紧凑的深度学习库。该库的要求是用于 OSX 或 Linux 的 Julia 0.6 和 g++。该库在 CPU 和 CUDA GPU 上运行。

斯特拉达

Strada 是 Julia 的一个开源深度学习库,基于流行的 Caffe 框架。该库支持在 CPU 和 GPU 上进行卷积和循环神经网络训练。这个库的一些特性包括灵活性、对 Caffe 特性的支持、与 Julia 的集成等。

Julia的应用领域

  1. 用于天文学的并行超级计算: Celeste 研究团队花了三年时间开发和测试一种新的并行计算方法,该方法用于处理 Sloan 数字巡天数据集,并在 14.6 分钟内生成最准确的 1.88 亿个天文物体目录。 -最先进的点和不确定性估计。
  2. Tangent Works -Tangent Works 使用 Julia 构建了一个全面的分析解决方案,它模糊了数据科学家完成的原型设计和开发人员完成的产品开发之间的障碍。
  3. 糖尿病视网膜病变 - 糖尿病视网膜病变是一种眼部疾病,影响超过 1.26 亿糖尿病患者,占全球失明病例的 5% 以上。及时筛查和诊断有助于预防全球数百万糖尿病患者的视力丧失。 IBM 和 Julia Computing 分析了 Drishti 眼科医院提供的眼底图像,并构建了一个深度学习解决方案,为成千上万的印度农村人提供眼科诊断和护理。
  4. 朱莉娅在人工中扮演了一个了不起的角色,因为:-
    • 它是执行深度学习的最佳方法之一。
    • 旨在快速实现基本的数学和科学查询。