📜  Julia 深度学习简介

📅  最后修改于: 2021-11-25 04:41:27             🧑  作者: Mango

数据科学中的一个新过渡是 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 模型中。

摩卡咖啡

  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 的集成等。

朱莉娅的应用领域

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