如何解决通量模型参数崩溃为零
我一直在使用Flux.jl库,并希望创建一个简单的概念验证自动编码器。引用了model zoo之后,我创建了以下玩具模型,该模型沿y = x ^ 2曲线进行输入 在R ^ 2中,并尝试将其发送到一维代码层表示形式后进行重构:
using Flux
using Flux: @epochs,onehotbatch,mse,throttle#,params
using Base.Iterators: partition
using Distributions
##creating simple 2-1-2 AE
function build_train_data()
function gen()
x=rand(Uniform(0,1),1,10)
y=x.^2
xy = vcat(x,y)
return xy
end
train_data=[gen() for i in 1:10]
return train_data
end
function train()
train_data=build_train_data()
encoder=Dense(2,relu)
decoder=Dense(1,2,relu)
model = Chain(
encoder,decoder
)
@info("Training model.....")
loss(x) = mse(model(x),x)
lr=1e-3
opt = ADAM(lr)
evalcb = throttle(() -> @show(loss(train_data[1])),1)
@epochs 100 Flux.train!(loss,Flux.params(model),zip(train_data),opt,cb = evalcb)
return model
end
m =train()
td=build_train_data()
现在,我不希望这种模型产生月亮。话虽如此,我没想到会产生以下结果:
x=[0.9860286863631649 0.9209976855681348 0.6793548732252492 0.909752849042454 0.6926766153752839 0.9622926489586887 0.9639670701324241 0.8053711974593387 0.19502650255217913 0.38968830975794666; 0.9722525703310686 0.8482367368218608 0.46152304377489445 0.8276502463408622 0.479800893487759 0.9260071422399301 0.9292325122996898 0.6486227656970891 0.03803533669773513 0.15185697876200538]
m(x)=Float32[0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.96854496 0.84631497 0.46364155 0.8260073 0.4818032 0.92298573 0.9261639 0.6491447 0.0359351 0.15342757]
Flux.params(m)=Params([Float32[0.058760125 1.4413338],Float32[-0.0049902047],Float32[-1.0241822; 0.6694982],Float32[0.0,-0.005099244]])
进行一轮训练,
x=[0.4789886773906975 0.8739656341280784 0.8535570077535617 0.6553854355816602 0.5611963054162175 0.22277653137378484 0.8716704866290759 0.30803815544599367 0.6973631796646094 0.07522895316317268; 0.22943015306848968 0.7638159296368942 0.7285595654852137 0.4295300691725624 0.31494129321281245 0.04962938293093494 0.7598094372601699 0.09488750521057016 0.48631540435193427 0.00565939539402683]
m(x)=Float32[0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]
Flux.params(m)=Params([Float32[-0.071433514 -0.4906463],Float32[0.0],Float32[-0.14397836; 0.5831637],0.0]])
另一个。
如您所见,在前一种情况下,对于输入的“ x ^ 2”行,重建似乎工作得很好,这使我相信该模型至少部分起作用。问题的根源在于我通常使用的调试技术套件,这使我相信问题的根源可能在于键入,(缺乏)GPU利用率,或者更特有的法律意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。