大量训练后损失没有减少
No decrease in loss after lots traning
我正在尝试训练卷积网络。但它并没有改善,即损失没有减少。而且火车功能也比平时更快地终止。下面是显示问题的最少代码。
using Flux
data=rand(200, 100, 1, 50)
label=rand([0.0,1.0], 1, 50)
model=Chain(
Conv((3,3), 1=>5, pad=(1,1)),
MaxPool((2,2)),
Conv((3,3), 5=>5, pad=(1,1)),
MaxPool((2,2)),
Conv((3,3), 5=>5, pad=(1,1)),
MaxPool((2,2)),
x->reshape(x, :, size(x, 4)),
x->σ.(x),
Dense(1500,100),
Dense(100,1)
)
model(data)
loss=Flux.mse
opt=Descent(0.1)
param=params(model)
loss(model(data), label) #=>0.3492440767136241
Flux.train!(loss, param, zip(data, label), opt)
loss(model(data), label) #=>0.3492440767136241
Flux.train!
的第一个参数需要是接受数据、运行模型和 returns 损失的函数。它的循环看起来像这样:
for dtup in zip(data, label)
gradient(() -> loss(dtup...), params)
...
end
但是你提供的函数loss
根本没有调用模型,它只是直接将数据点与标签进行比较。
这里还有更多问题需要解决。迭代的是数字元组,从 zip(data, label) |> first
开始,我认为这不是您想要的。也许您希望 Flux.DataLoader
迭代批量图像?
我正在尝试训练卷积网络。但它并没有改善,即损失没有减少。而且火车功能也比平时更快地终止。下面是显示问题的最少代码。
using Flux
data=rand(200, 100, 1, 50)
label=rand([0.0,1.0], 1, 50)
model=Chain(
Conv((3,3), 1=>5, pad=(1,1)),
MaxPool((2,2)),
Conv((3,3), 5=>5, pad=(1,1)),
MaxPool((2,2)),
Conv((3,3), 5=>5, pad=(1,1)),
MaxPool((2,2)),
x->reshape(x, :, size(x, 4)),
x->σ.(x),
Dense(1500,100),
Dense(100,1)
)
model(data)
loss=Flux.mse
opt=Descent(0.1)
param=params(model)
loss(model(data), label) #=>0.3492440767136241
Flux.train!(loss, param, zip(data, label), opt)
loss(model(data), label) #=>0.3492440767136241
Flux.train!
的第一个参数需要是接受数据、运行模型和 returns 损失的函数。它的循环看起来像这样:
for dtup in zip(data, label)
gradient(() -> loss(dtup...), params)
...
end
但是你提供的函数loss
根本没有调用模型,它只是直接将数据点与标签进行比较。
这里还有更多问题需要解决。迭代的是数字元组,从 zip(data, label) |> first
开始,我认为这不是您想要的。也许您希望 Flux.DataLoader
迭代批量图像?