问题标签 [flux.jl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
102 浏览

julia - 贝叶斯 ODE 与 Julia

我一直在尝试实现贝叶斯 ODE。在石油行业,我们使用以下等式拟合生产数据然后进行预测:

ODE 方程描述为:

其中 0<n<1,n 和 K 是通过拟合原始生产数据定义的参数,在我的情况下,K 为 0.17,n = 0.87。

我的初始代码:

不知道如何解决这个问题:

0 投票
0 回答
115 浏览

julia - 在 Julia 中使用带有 GPU 的通量时出错

以上是我第一个使用flux和julia的深度学习项目。尝试使用 GPU 时出现以下错误。

RuntimeError: <PyCall.jlwrap (在从 Python 调用的 Julia 函数中) JULIA: InvalidIRError: 编译内核 getindex_kernel(CUDA.CuKernelContext, CuDeviceArray{Float32,4,1}, CuDeviceArray{Float32,4,1}, NTuple{4,Int64 }, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, CuDeviceArray{Int64,1,1}) 导致无效LLVM IR 原因:不支持的动态函数调用(调用 pointerref(ptr::Core.LLVMPtr{T,A}, i::Int64, ::Val{align}) where {T, A, align} in LLVM.Interop at /root/.julia/packages/LLVM/F9DFY/src/interop/pointer.jl:7)

任何帮助都会很棒。我正在为这个项目使用 Kaggle 环境。

0 投票
1 回答
52 浏览

julia - 在 Flux (Julia) 中运行 VGG19 模型时出现 MethodError

下面提到的代码取自model-zoo。我正在尝试使用通量库在 julia中运行vgg19 教程。

代码:

当我在 IJulia 上执行此文件时,会引发以下错误:

请为此错误提出一些解决方案,如果可能,请提供简要说明或参考。提前致谢!

0 投票
0 回答
122 浏览

julia - 在 Julia 中对机器学习 (flux) 代码进行基准测试

我正在尝试对Flux下面提到的代码的性能进行基准测试:

我尝试使用内置tick()tock()功能来测量时间。但是,这给了执行密集比较的基本时间并且效率不高。社区中的许多开发人员都建议使用BenchmarkTools.jlpackage 来对代码进行基准测试。但是当我尝试ScikitLearn Model在 REPL 中进行基准测试时,它会产生警告;

REPL同样,我尝试在using中对上述代码进行基准测试,@btime但它会引发此错误:

我可以知道执行代码详细基准测试的最佳方法是什么?

提前致谢。

0 投票
0 回答
331 浏览

performance - Flux.jl 没有利用 julia 中所有可用的线程进行机器学习

我对下面提到的来自model-zoo的通量代码进行了基准测试。我注意到一些性能问题:

  1. Flux 比等效的 python 慢。
  2. Flux 不会利用所有线程来执行(通常 CPU 使用率约为 50%)。

代码:

我曾尝试使用sysimage包含pre-compilation文件运行此代码,但结果仍然不支持通量。

请评论我在这段代码中的错误,这使得它比 python 慢。正如我想知道的那样,朱莉娅应该比 python 快。

我还在julia-discourse上发布了这个问题。

提前致谢!

0 投票
1 回答
197 浏览

julia - 使用 Zygote 在 Julia 中计算包含 NN wrt 参数的损失函数的 Hessian

您将如何计算由神经网络 wrt NN 参数组成的损失函数的粗麻布?

例如,考虑下面的损失函数

我可以通过两种方式获得渐变 wrt 参数……</p>

或者

但是,我找不到一种方法来获取粗麻布的参数。(我想做类似的事情Zygote.hessian(model -> loss(model), model),但Zygote.hessian::Params作为输入)

最近,一个jacobian函数被添加到 master 分支(issue #910),它被理解::Params为一个 input

我一直在尝试组合gradientjacobian获得粗麻布(因为粗麻布是函数梯度的雅可比),但无济于事。我认为问题在于这model是一个Chain包含通用函数的对象,reshape并且σ.缺少参数,但我无法超越这一点。

编辑:作为参考,我之前在 pytorch 中创建了这个

0 投票
0 回答
48 浏览

neural-network - 创建一个简单的神经网络来预测和生成音乐

我目前正在尝试实现一个神经网络,它将根据给定的训练生成音乐。我正在使用 Flux 包在 Julia 中编写,但是我发现文档有点难以掌握(我理解 nn 背后的逻辑,但是,我仍然对不同函数的作用感到困惑)。

我首先设置了一些训练数据以输入模型:

想法是将标签索引 1 处的值输入模型,并告诉它预期输出是索引 2 处的值。然后给它索引 2,并说预期输出是索引 3,依此类推。然后,这些值充当地图,我们可以使用它来获得原始音高和节奏。

我是否正确地说该模型将能够根据预测生成一些音乐?

有人能给我一个关于如何创建模型来实现这一目标的先机吗?

干杯

0 投票
0 回答
175 浏览

machine-learning - Julia Flux 中循环神经网络训练中的歧义

我正在使用 Julia 的 Flux 库来学习神经网络。根据train!(其中train!需要参数(loss, params, data, opt))的文档:

对于 data 中的每个数据点 d,通过反向传播计算相对于 params 的损失梯度并调用优化器 opt。

(参见来源train!https ://github.com/FluxML/Flux.jl/blob/master/src/optimise/train.jl )

对于基于传统的神经网络Dense——比方说具有一维输入和输出,即具有一个特征——这很容易理解。中的每个元素data都是一对单个数字,是一维输入/输出值的独立样本。 train!一次对每对一维样本进行一个前向和反向传播。在此过程中,loss函数会在每个样本上进行评估。(我有这个权利吗?)

我的问题是:这如何扩展到循环神经网络?以具有一维(即一个特征)输入和输出的 RNN 为例。似乎在如何构造输入和输出数据方面存在一些歧义,并且结果会根据结构而变化。举个例子:

loss函数取自:https ://github.com/FluxML/Flux.jl/blob/master/docs/src/models/recurrence.md )

在此示例中,当train!循环遍历每个样本 ( for d in data) 时, 的每个值都是来自和d的一对单个值,例如。 基于这些单一值进行评估。这与本案相同。xy([1], 4)lossDense

另一方面,考虑:

请注意,这里唯一的区别是xy嵌套在一对额外的方括号中。结果只有一个d in data,它是一对序列:([[1], [2], [3]], [4, 5, 6])loss可以在这个版本的 上进行评估d,并且它返回一个 1-d 值,这是训练所需的。但是返回的值loss与前一个案例的三个结果中的任何一个都不同,因此训练过程结果不同。

关键是这两种结构在某种意义上都是有效的,loss并且可以train!毫无错误地处理它们。从概念上讲,我可以论证两种结构都是正确的。但结果不同,我认为只有一种方法是正确的。换句话说,对于训练一个 RNN,每个应该d in data是一个完整的序列,还是一个序列中的单个元素?

0 投票
1 回答
82 浏览

julia - 由于策略争论,使用 NueralPDE.jl 中的 PhysicsInformedNN() 时出现 MethodError

我正在尝试通过阅读此处找到的文档教程来学习用于某些 PINN 工作的 NeuralPDE.jl 的语法。

使用 PhysicsInformedNN(chain, strategy) 函数构建 PINN 算法时,无论我尝试使用哪种策略,都会收到 MethodError。该教程建议使用 GridTraining(.05),我也尝试了 StochasticTraining(::Int64),但没有成功。

错误:

0 投票
0 回答
65 浏览

machine-learning - Julia Flux 梯度函数的奇怪结果

在我上一个关于使用 Flux 训练循环神经网络的困惑之后,我更深入地研究了 Flux 训练过程,现在我更加困惑了。我认为我的麻烦在于在loss函数中使用总和,因此损失会考虑到序列中的许多点。请参见此处,其中损失定义为:

loss(x, y) = sum((Flux.stack(m.(x),1) .- y) .^ 2)

如果x是具有多个点的序列,并且y是每个点的对应输出,则此loss函数评估整个序列的损失。我想了解的是 Flux 如何采用这样的函数的梯度。想象一下将其简化为:

L(x, y) = sum((Flux.stack(m.(x), 1) .- y))

我们还可以创建一个非常简单的循环神经“网络”作为单个 1 -> 1 节点,没有激活函数:

m = Flux.RNN(1, 1, x -> x)

这(有点)相当于:

loss相对于的梯度是Wx多少?取一个包含两个点的序列,x = [x1, x2] 和 y* = [y1*, y2*]。将 x1 通过 RNN 得到:

y1 = h2 = Wx*x1 + Wh*h1 + b

然后把 x2 通过,你得到:

y2 = h3 = Wx*x2 + Wh*h2 + b = Wx*x2 + Wh*(Wx*x1 + Wh*h1 + b) + b。

现在计算损失:

L = y1 - y1* + y2 - y2* = Wx*x1 + Wh*h1 + b - y1* + Wx*x2 + Wh*(Wx*x1 + Wh*h1 + b) + b - y2*

很明显,dL/dWx 应该是 x1 + x2 + Wh*x1。所以让我们说x并且y是:

并且参数被初始化为:

如果计算 dL/DWx = x1 + x2 + Wh*x1,则为 2.8003。您也可以尝试有限差分:

并得到 2.8003。但是如果你使用 Flux 的gradient功能:

你得到 2.8025,这似乎是 x1 + x2 + Wh*x2。我不明白为什么结果会有所不同,尤其是考虑到在评估两个不同的损失函数本身时一切都是一致的。有什么我忽略的吗?里面有什么奇怪的事情gradient吗?