Julia 磁通损耗函数未按预期读取数据
对于我来说,这可能是一个非常简单的错误,但我似乎无法理解。我正在尝试构建一个RNN,它将学习数字序列。示例数据集(每行表示一个数据点) 我主要遵循这个例子: 我的数据和示例中的数据被读取为数组{Array{Float64,1},1}。这是我的一些代码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,
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)