Julia 磁通损耗函数未按预期读取数据

Julia 磁通损耗函数未按预期读取数据,julia,flux-machine-learning,Julia,Flux Machine Learning,对于我来说,这可能是一个非常简单的错误,但我似乎无法理解。我正在尝试构建一个RNN,它将学习数字序列。示例数据集(每行表示一个数据点) 我主要遵循这个例子: 我的数据和示例中的数据被读取为数组{Array{Float64,1},1}。这是我的一些代码 function eval_model(model, x) out = model.(x)[end] Flux.reset!(model) return out end m = Chain(GRU(1, 40), Dense(40,

对于我来说,这可能是一个非常简单的错误,但我似乎无法理解。我正在尝试构建一个RNN,它将学习数字序列。示例数据集(每行表示一个数据点)

我主要遵循这个例子:

我的数据和示例中的数据被读取为数组{Array{Float64,1},1}。这是我的一些代码

function eval_model(model, x)
  out = model.(x)[end]
  Flux.reset!(model)
  return out
end

m = Chain(GRU(1, 40), Dense(40, 1, σ))

loss(y) = Flux.crossentropy(eval_model(m, y), y)

ps = Flux.params(m)

opt = Flux.ADAM()

@epochs 100 Flux.train!(loss, ps, data, opt)
输出:

MethodError: no method matching loss(::Float64, ::Float64, ::Float64, ::Float64, ::Float64)
Closest candidates are:
  loss(::Any, ::Any) at In[4]:2
loss函数将读取序列中的每个数字作为loss函数的单独输入(我尝试了其他序列长度,错误相同,但它是“MethodError:no method matching loss((序列长度)*::Float64)”


在我正在研究的示例中,这不是一个问题。我可以从头开始构建培训过程,但更愿意将内容传递给Flux。

这是数据形状的问题:
train!
假设您将数据拆分为预测值和目标,以应用于
损失(x,y)
。但在您的情况下,
训练!
会将数据分割成不需要的部分

data=zip(x,y)
将允许
train!
在x和y数据集中分割数据

此外,dataset和loss函数只取y,这使我对您试图预测的内容感到不明确。如果要预测序列中的下一项,则x应省略序列中的最后一个元素,y跳过序列中的第一个元素

考虑此示例以预测序列中的下一个元素:

x = data[:,1:end-1]
y = data[:,2:end]
loss(x,y) = Flux.crossentropy(eval_model(m, x), y)
@epochs 100 Flux.train!(loss, ps, zip(x,y), opt)
x = data[:,1:end-1]
y = data[:,2:end]
loss(x,y) = Flux.crossentropy(eval_model(m, x), y)
@epochs 100 Flux.train!(loss, ps, zip(x,y), opt)