小编dus*_*usa的帖子

Validation loss 震荡很大,validation accuracy > learning accuracy,但测试准确率高。我的模型是否过拟合?

  1. 我正在训练一个模型,并使用作者的原始学习率(我也使用他们的github),我得到了一个不断振荡的验证损失,它会减少但突然跳到一个大值然后再次减少,但从未真正收敛,因为它得到的最低值是 2(而训练损失收敛到 0.0 - 远低于 1)

在每个时期,我都会得到训练准确度,最后得到验证准确度。验证精度总是大于训练精度。

当我在真实的测试数据上进行测试时,我得到了很好的结果,但我怀疑我的模型是否过度拟合。我希望一个好的模型的 val 损失以与训练损失类似的方式收敛,但这并没有发生,而且 val 损失有时会波动到非常大的值这一事实让我感到担忧。

  1. 调整学习率和调度程序等,我得到了 val loss 和 training loss 以减少振荡的向下方式,但是这次我的测试准确度仍然很低(以及训练和验证准确度)

我确实尝试了几个带有步进调度程序的优化器(adam、sgd、adagrad)以及 pytorch 的 pleteu,我使用了步长等,但它并没有真正帮助,也没有剪切渐变。

  1. 我的模型是否过拟合?
  2. 如果是这样,除了数据增强之外,如何减少过度拟合?
  3. 如果不是(我在 quora 上读到一些人说这没什么可担心的,尽管我认为它一定是过度拟合了),我怎么证明它是合理的?即使我会在 k 折实验中得到类似的结果,它是否足够好?我不认为这可以证明振荡是合理的。我应该如何进行?

optimization deep-learning conv-neural-network

8
推荐指数
1
解决办法
7752
查看次数

调整图像大小后寻找新位置 (x,y)

我有一组边界框形式的对象注释。我有这些边界框的 x,y 和 x2y2 坐标。我希望使用 Matlab 的 imresize 或 opencv/python INTER_AREA 预处理图像并调整它们的大小。没有问题,但我希望找到边界框坐标的新位置。

理想情况下,我应该能够从 INTER_AREA 获取变换矩阵并将其应用于坐标,但尽管我浏览了大量内容,但我看不到这样做的方法。

谢谢。

python matlab opencv transform image-processing

7
推荐指数
1
解决办法
3699
查看次数

如何为每个输入预先计算掩码并根据此掩码调整权重?

我想提供一个与输入图像大小相同的掩码,并根据此掩码调整从图像中学习的权重(类似于注意力,但为每个图像输入预先计算)。如何使用 Keras(或 TensorFlow)做到这一点?

conv-neural-network keras tensorflow attention-model

4
推荐指数
1
解决办法
1586
查看次数

为什么我的模型预测相同的标签?

我正在训练一个小型网络,训练似乎进展顺利,val 损失减少,验证准确度达到 80 左右,一旦没有更多改进,它实际上会停止训练(耐心=10)。它训练了 40 个 epoch。然而,它只为每个测试图像预测一个类别!我尝试随机初始化转换层,我添加了正则化器,我从 Adam 切换到 SGD,我添加了 Clipvalue,我添加了 dropout。我还切换到了softmax(我只有两个标签,但我看到了一些关于使用softmax和带有2个神经元的密集层的建议)。其中一些或其中一项有助于解决过度拟合问题,但对预测问题没有任何作用。尽管数据集很小,但数据是平衡的,因此如果它也为评估集预测相同的标签,则达到 80% 是没有意义的。

我的模型有什么问题以及如何修复它?欢迎任何评论。

#Import some packages to use
import cv2
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
import os
from keras.regularizers import l2
from keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
from keras.layers.core import Dense, Dropout, Flatten
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.initializers import RandomNormal

os.environ["CUDA_VISIBLE_DEVICES"]="0"

epochs = 200
callbacks = []
#schedule = None
decay = 0.0 …
Run Code Online (Sandbox Code Playgroud)

training-data neural-network deep-learning conv-neural-network keras

4
推荐指数
1
解决办法
3699
查看次数

PyTorch 自定义数据集数据加载器返回字符串(键)而不是张量

我正在尝试加载我自己的数据集,并且我使用了一个自定义Dataloader来读取图像和标签并将它们转换为 PyTorch 张量。然而,当Dataloader被实例化时,它返回字符串 x"image"和 y,"labels"而不是读取时的实际值或张量 ( iter)

print(self.train_loader)  # shows a Tensor object
tic = time.time()
with tqdm(total=self.num_train) as pbar:
    for i, (x, y) in enumerate(self.train_loader):  # x and y are returned as string (where it fails)

        if self.use_gpu:
            x, y = x.cuda(), y.cuda()
        x, y = Variable(x), Variable(y)
Run Code Online (Sandbox Code Playgroud)

这是dataloader.py这样的:

from __future__ import print_function, division #ds
import numpy as np
from utils import plot_images

import os #ds
import pandas …
Run Code Online (Sandbox Code Playgroud)

image enumerate dataset pytorch tensor

2
推荐指数
1
解决办法
7207
查看次数

为什么 pytorch 中的学习率(LR)不会低于 1e-08?

我正在训练一个模型。为了克服过度拟合,我做了优化、数据增强等。我有一个更新的 LR(我尝试了 SGD 和 Adam),当出现平台期(也尝试过步骤)时,学习率会降低一个因子,直到达到达到 LR 1e-08 但不会低于该值,并且我的模型的验证在此之后陷入困境。我尝试将 epsilon 参数传递给 Adam 以建议较小的值,但它仍然卡在 LR 1e-08。我也经历了体重衰减,但这并没有改变情况。将 amsgrad 设置为 true 也没有。

我做了一些研究,人们认为 Adam 优化器存在固有的问题,但没有提到学习率 - 每次讨论都补充说,使用 SGD 就没有问题。

为什么是这样?这是一个错误还是因为作者认为它是一个毫无意义的小值而设计的?似乎对我的数据集设置较小的学习率确实有帮助,因为在学习率降至 LR 1e-08 之前一切似乎都很好。

optimization gradient-descent deep-learning pytorch

1
推荐指数
1
解决办法
1852
查看次数