chengchingwen / Transformers.jl

Julia Implementation of Transformer models
MIT License
523 stars 74 forks source link

Flux.onehot freezes when used with Vocabulary, or throws StackOverflow #64

Closed mashu closed 3 years ago

mashu commented 3 years ago

Here is the stack

(@v1.6) pkg> status
      Status `~/.julia/environments/v1.6/Project.toml`
  [69666777] Arrow v1.5.0
  [c52e3926] Atom v0.12.32
  [fbb218c0] BSON v0.3.3
  [336ed68f] CSV v0.8.5
  [052768ef] CUDA v3.2.1
  [a93c6f00] DataFrames v1.1.1
  [587475ba] Flux v0.12.4
  [e5e0dc1b] Juno v0.8.4
  [6f286f6a] MultivariateStats v0.8.0
  [91a5bcdd] Plots v1.15.2
  [2913bbd2] StatsBase v0.33.8
  [21ca0261] Transformers v0.1.12
  [e88e6eb3] Zygote v0.6.11
  [9a3f8284] Random
julia> Flux.onehot(vocab,[1])
ERROR: StackOverflowError:
Stacktrace:
  [1] findnext(testf::Base.Fix2{typeof(isequal), Int64}, A::Vector{Any}, start::Int64)
    @ Base ./array.jl:1855
  [2] findfirst
    @ ./array.jl:1906 [inlined]
  [3] encode(vocab::Vocabulary{Any}, i::Int64)
    @ Transformers.Basic ~/.julia/packages/Transformers/rCnGb/src/basic/embeds/vocab.jl:32
  [4] (::Transformers.Basic.var"#13#14"{Vocabulary{Any}})(x::Int64)
    @ Transformers.Basic ~/.julia/packages/Transformers/rCnGb/src/basic/embeds/vocab.jl:34
  [5] iterate
    @ ./generator.jl:47 [inlined]
  [6] _collect(c::Vector{Int64}, itr::Base.Generator{Vector{Int64}, Transformers.Basic.var"#13#14"{Vocabulary{Any}}}, #unused#::Base.EltypeUnknown, isz::Base.HasShape{1})
    @ Base ./array.jl:691
  [7] collect_similar
    @ ./array.jl:606 [inlined]
  [8] map
    @ ./abstractarray.jl:2294 [inlined]
  [9] encode(vocab::Vocabulary{Any}, xs::Vector{Int64})
    @ Transformers.Basic ~/.julia/packages/Transformers/rCnGb/src/basic/embeds/vocab.jl:34
 [10] (::Vocabulary{Any})(x::Vector{Int64})
    @ Transformers.Basic ~/.julia/packages/Transformers/rCnGb/src/basic/embeds/vocab.jl:52
 [11] onehot(v::Vocabulary{Any}, x::Vector{Int64}) (repeats 79973 times)
    @ Transformers.Basic ~/.julia/packages/Transformers/rCnGb/src/basic/embeds/vocab.jl:83
chengchingwen commented 3 years ago

MWE:

julia> vocab = Vocabulary(['a', 2, 'c'], 0)                                                                               
Vocabulary(4, unk=0)  

julia> Flux.onehot(vocab, ['a'])
ERROR: StackOverflowError:
[...]