在 Julia Flux 中评估简单的 RNN

Posted

技术标签:

【中文标题】在 Julia Flux 中评估简单的 RNN【英文标题】:Evaluate simple RNN in Julia Flux 【发布时间】:2021-08-28 05:49:36 【问题描述】:

我正在尝试在 Julia 中使用 Flux.jl 学习递归神经网络 (RNN),并遵循一些教程,例如 FluxML/model-zoo 中的 Char RNN。

我设法构建并训练了一个包含一些 RNN 单元的模型,但在训练后未能评估该模型。

有人能指出我在评估简单(未经训练的)RNN 时缺少什么吗?

julia> using Flux
julia> simple_rnn = Flux.RNN(1, 1, (x -> x))
julia> simple_rnn.([1, 2, 3])

ERROR: MethodError: no method matching (::Flux.RNNCellvar"#1#2", MatrixFloat32, VectorFloat32, MatrixFloat32)(::MatrixFloat32, ::Int64)
Closest candidates are:
  (::Flux.RNNCellF, A, V, var"#s263" where var"#s263"<:AbstractMatrixT)(::Any, ::UnionAbstractMatrixT, AbstractVectorT, Flux.OneHotArray) where F, A, V, T at C:\Users\UserName\.julia\packages\Flux\6o4DQ\src\layers\recurrent.jl:83
Stacktrace:
 [1] (::Flux.RecurFlux.RNNCellvar"#1#2", MatrixFloat32, VectorFloat32, MatrixFloat32, MatrixFloat32)(x::Int64)
   @ Flux C:\Users\UserName\.julia\packages\Flux\6o4DQ\src\layers\recurrent.jl:34
 [2] _broadcast_getindex_evalf
   @ .\broadcast.jl:648 [inlined]
 [3] _broadcast_getindex
   @ .\broadcast.jl:621 [inlined]
 [4] getindex
   @ .\broadcast.jl:575 [inlined]
 [5] copy
   @ .\broadcast.jl:922 [inlined]
 [6] materialize(bc::Base.Broadcast.BroadcastedBase.Broadcast.DefaultArrayStyle1, Nothing, Flux.RecurFlux.RNNCellvar"#1#2", MatrixFloat32, VectorFloat32, MatrixFloat32, MatrixFloat32, TupleVectorInt64)
   @ Base.Broadcast .\broadcast.jl:883
 [7] top-level scope
   @ REPL[3]:1
 [8] top-level scope
   @ C:\Users\UserName\.julia\packages\CUDA\LTbUr\src\initialization.jl:81

我在 Windows 10 上使用 Julia 1.6.1。

【问题讨论】:

【参考方案1】:

原来只是输入类型的问题。

这样做会奏效:

julia> v = VectorVectorFloat32([[1], [2], [3]])
julia> simple_rnn.(v)
3-element VectorVectorFloat32:
 [9.731078]
 [16.657223]
 [28.398548]

我尝试了很多组合,直到找到有效的组合。可能有一种方法可以使用某些评估函数自动转换输入。

【讨论】:

以上是关于在 Julia Flux 中评估简单的 RNN的主要内容,如果未能解决你的问题,请参考以下文章

用RNN & CNN进行情感分析 - PyTorch

Chez Scheme 中是不是对已编译/评估过的程序的内存进行了垃圾回收?

Julia 中的随机森林和 ROC 曲线

model.evaluate()中batch_size的含义

向所有张量流变量添加高斯噪声

RNN