大量训练后损失没有减少

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 迭代批量图像?