精华内容
下载资源
问答
  • 训练集明明很高,验证集,测试集精度却很

    万次阅读 多人点赞 2020-04-30 22:53:39
    你犯了错误:没有在分验证之前打乱数据 因为validation_split操作不会为你shuffle数据,所以如果你的数据前一半标签全是1 ,后一半全是0,validation=0.5。恭喜你,你压根也分不对,你的validation准确率会一直为0...

    损失函数一直在下降,为什么识别率上不去。

    1.最常见的原因:过拟合

    过拟合值得单独开个章节。主要包括

    1.数据量小,网络复杂

    2.learning rate 比较高,又没有设置任何防止过拟合的机制

    解决方法主要包括

    1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug)

    2.利用 dropout层

    3.利用正则化

    2.你犯了错误:没有把数据规格化

    图片的话,img/255是肯定的

    3.你犯了错误:没有在分验证集之前打乱数据

    因为validation_split操作不会为你shuffle数据,所以如果你的数据前一半标签全是1 ,后一半全是0,validation=0.5。恭喜你,你压根也分不对,你的validation准确率会一直为0.因为你拿所有的正样本训练,却想判断负样本。

    4.你犯了错误,数据和标签没有对上

    有可能再读取自定义的数据库的时候出现问题,导致数据与标注不对应。比如第一张图片用第十张的标注

    5.你的训练数据太少,validation数据太多,类别也太多

    比如4000张训练,1000张validation,300类,这显然就是不合理的

    6.最好使用预训练的权重

    大多数流行的backone比如resnet都有再imagenet数据集上与训练过,那么使用这种权重,比起随即重新训练,显然要可靠不少,注意调整学习率。

    7.网络结构有问题

    可以通过使用现在流行的网络(resnet,unet等)替入你的代码,如果结果没有问题,你的结果有问题那么肯定就是你网络结构出问题了。那么可以通过逐层注释掉排查究竟哪里出了问题

    7.1 网络最后一层没有使用正确的激活函数
    比如多类的应该使用softmax

    8.relu后面是softmax

    有一些说法是relu由于对于很大的数值直接复制,所以会对softmax产生不好的影响,从而输出不好的结果。所以可以使用tanh代替relu。

    9.batch normalization需要batch size至少16张

    https://mp.csdn.net/postedit/89456400

    由于做dense prediction图片通常比较大。所以一个batch一般都只有1-2张图片,不建议使用 BN。

    因为BN一般是16张图片以上一起跑。所以吧,如果是BN,那么请用多GPU,16以上的batch size。s

    另外keras TF1.x可能会出问题,https://github.com/keras-team/keras/pull/9965

    10.你犯了错误,你可能设置了一些参数是不可训练的

    在训练语句之前,检查以下你的trainable参数,是否设置了一些参数是不可训练的。这还可能导致你的输出只能是一个值,比如永远预测为标注0,因为你只有一点点的参数,而这并不是一个模型(比如只有100个参数是可以训练的,太简单了,无法模拟)。

    11.附送一个调参论文

    Bag of Tricks for Image Classification with Convolutional Neural Networks

    https://arxiv.org/abs/1812.01187

    原文链接:https://blog.csdn.net/u013249853/article/details/89393982

    展开全文
  • 训练的精度高,但是测试精度低

    千次阅读 2019-10-24 09:43:18
    训练的精度高,但是测试精度低 训练精度比较高,验证的精度在40%左右,Kappa系数0.4和测试精度50%,经查验发现,原始的数据是(100,2000,2500)(channel,row,column),标签是(2500,2000),于是我把原始的数据...

    训练的精度高,但是测试的精度低

    训练精度比较高,验证的精度在40%左右,Kappa系数0.4和测试精度50%,经查验发现,原始的数据是(100,2000,2500)(channel,row,column),标签是(2500,2000),于是我把原始的数据改成了(2500,2000,100)导致精度不高,最后我把数据改成(2000,2500,100),标签改成(2000,2500),精度达到了90%,特此记录一下。

    展开全文
  • Keras训练CIFAR 10 测试集精度90%网络结构及代码

    最近接触ML,在尝试玩儿CIFAR 10。一般网络上面的代码精度只有60%-80%。我再其基础上瞎JB修改了一下,在训练集精度93%左右的时候开始出现过拟合,最终测试集精度在90%出头。后续还会继续尝试提高精度,这个网络有需求的小伙伴可以拿去玩耍。

    Keras下载及安装: Keras安装文档

    先贴结果:

    Epoch 768/2000

    250/250 [==============================] - 543s - loss: 0.1814 - acc: 0.9418 - val_loss: 0.3165 - val_acc: 0.9045

    请无视我的训练时间,毕竟CPU训练。。。500+S一个EPOCH,你猜训了2000次要多久呢? T.T


    不废话,贴代码

    使用以下代码覆盖原Keras/example/cifar10_cnn.py即可。

    '''Train a simple deep CNN on the CIFAR10 small images dataset.
    
    GPU run command with Theano backend (with TensorFlow, the GPU is automatically used):
        THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatx=float32 python cifar10_cnn.py
    
    It gets down to 0.65 test logloss in 25 epochs, and down to 0.55 after 50 epochs.
    (it's still underfitting at that point, though).
    '''
    
    from __future__ import print_function
    import keras
    from keras.datasets import cifar10
    from keras.preprocessing.image import ImageDataGenerator
    from keras.models import Sequential
    from keras.layers import Dense, Dropout, Activation, Flatten
    from keras.layers import Conv2D, MaxPooling2D
    
    batch_size = 200
    num_classes = 10
    epochs = 2000
    data_augmentation = True
    
    # The data, shuffled and split between train and test sets:
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()
    print('x_train shape:', x_train.shape)
    print(x_train.shape[0], 'train samples')
    print(x_test.shape[0], 'test samples')
    
    # Convert class vectors to binary class matrices.
    y_train = keras.utils.to_categorical(y_train, num_classes)
    y_test = keras.utils.to_categorical(y_test, num_classes)
    
    model = Sequential()
    
    model.add(Conv2D(32, (3, 3), padding='same',input_shape=x_train.shape[1:]))
    model.add(Activation('relu'))
    model.add(Conv2D(32, (3, 3)))
    model.add(Activation('relu'))
    model.add(Dropout(0.25))
    
    model.add(Conv2D(64, (3, 3), padding='same'))
    model.add(Activation('relu'))
    model.add(Conv2D(64, (3, 3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    
    model.add(Conv2D(128, (3, 3), padding='same'))
    model.add(Activation('relu'))
    model.add(Conv2D(128, (3, 3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    
    model.add(Conv2D(256, (3, 3), padding='same'))
    model.add(Activation('relu'))
    model.add(Conv2D(256, (1, 1)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    
    model.add(Flatten())
    model.add(Dense(512))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(num_classes))
    model.add(Activation('softmax'))
    
    # initiate RMSprop optimizer
    opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
    
    # Let's train the model using RMSprop
    model.compile(loss='categorical_crossentropy',
                  optimizer=opt,
                  metrics=['accuracy'])
    
    x_train = x_train.astype('float32')
    x_test = x_test.astype('float32')
    x_train /= 255
    x_test /= 255
    
    if not data_augmentation:
        print('Not using data augmentation.')
        model.fit(x_train, y_train,
                  batch_size=batch_size,
                  epochs=epochs,
                  validation_data=(x_test, y_test),
                  shuffle=True)
    else:
        print('Using real-time data augmentation.')
        # This will do preprocessing and realtime data augmentation:
        datagen = ImageDataGenerator(
            featurewise_center=False,  # set input mean to 0 over the dataset
            samplewise_center=False,  # set each sample mean to 0
            featurewise_std_normalization=False,  # divide inputs by std of the dataset
            samplewise_std_normalization=False,  # divide each input by its std
            zca_whitening=False,  # apply ZCA whitening
            rotation_range=0,  # randomly rotate images in the range (degrees, 0 to 180)
            width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
            height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
            horizontal_flip=True,  # randomly flip images
            vertical_flip=False)  # randomly flip images
    
        # Compute quantities required for feature-wise normalization
        # (std, mean, and principal components if ZCA whitening is applied).
        datagen.fit(x_train)
    
        # Fit the model on the batches generated by datagen.flow().
        model.fit_generator(datagen.flow(x_train, y_train,
                                         batch_size=batch_size),
                            steps_per_epoch=x_train.shape[0] // batch_size,
                            epochs=epochs,
                            validation_data=(x_test, y_test))
    


    展开全文
  • 4、一次训练任务,精度上升非常快,出现集精度高(iou 0.5),验证集精度低(1e-12),由于dataset的filelist[index]在测试的时候加了一个编号,写为filelist[0],导致对第一张一直训练,搞到凌晨三点没找到原因,...

        写在最前面:最大的敌人就是自己。多检查,多思考,多受益。

        Batch Normalization layer对于新接触机器学习的同学来说是一个大坑,AI模型摸爬滚打一年,总结BN相关实战经验:

    1、网络使用BN层,数据一定要做归一化,RGB除以255,单分类标签为0/1,一定要做!!!

    2、使用数据增强,一定要可视化看一下增强后的图像与标签,特别是多分类任务,图像处理差值后标签容易出现改变!

    3、均值和方差不一定要算,数据量小(小于10g)的情况下建议直接使用ImageNet等大型数据集均值方差,效果可能更好。

    4、一次训练任务,精度上升非常快,出现集精度高(iou 0.5),验证集精度低(1e-12),由于dataset的filelist[index]在测试的时候加了一个编号,写为filelist[0],导致对第一张一直训练,搞到凌晨三点没找到原因,写出来提醒他人。

    5、少量数据训练情况下,可直接冻结BN层。

    展开全文
  • 测试集精度随着迭代次数增加呈现先升高后下降的趋势是为什么? 这是不是意味着过拟合了?模型参数太多或样本量不够复杂?
  • 解决卷积神经网络测试集正确率

    千次阅读 2020-10-05 17:14:04
    解决卷积神经网络测试集正确率问题描述可能的原因最终的原因结论 问题描述 在运用卷积神经网络进行图像识别的过程中,将数据集分为训练集与验证集,首先进行模型的训练,最终模型在训练集与验证集上的正确率均达到...
  • 验证集精度高于训练集精度的原因

    千次阅读 2020-05-07 20:35:08
    训练的数据做了一系列的增广,如旋转,仿射,模糊,添加噪点等操作;过多的增广使得训练分布产生了变化。 模型正则化过多,比如训练时dropout过多,和验证时的模型相差较大,验证时是不会有dropout的。 训练的...
  • 该库包含许多用MATLAB编写的交叉验证和测试集分类代码。 -> f_FeatureMtxtoAccur_LDAReg_KfoldCV此函数对输入数据集执行k倍交叉验证,并使用正则化LDA返回精度。 -> f_FeatureMtxtoAccur_LDAReg_LeaveOneOutCV该函数...
  • 在训练网络时,查看对测试集的准确率,一直很且不变(也就是网络并没有学习)的原因是什么? ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555914342_756745.png) 是迭代次数比较少吗?前200次迭代...
  • 训练集、验证集、测试集的划分

    万次阅读 多人点赞 2018-11-06 20:32:14
    在使用数据集训练模型之前,我们需要先将整个数据集分为训练集、验证集、测试集。训练集是用来训练模型的,通过尝试不同的方法和思路使用训练集来训练不同的模型,再通过验证集使用交叉验证来挑选最优的模型,通过...
  • 你犯了错误:没有在分验证之前打乱数据 因为validation_split操作不会为你shuffle数据,所以如果你的数据前一半标签全是1 ,后一半全是0,validation=0.5。恭喜你,你压根也分不对,你的validation准确率会一直为0...
  • 鸢尾花数据集8:2划分训练集和测试集,并进行决策树分类算法练习Graphviz的安装训练集、测试集的划分输出训练模型可视化树状图训练模型的精度F1-Score测试集精度F1-Score遇到的问题 针对鸢尾花数据集,按照80%训练...
  • Sklearn-train_test_split随机划分训练集和测试集

    万次阅读 多人点赞 2017-02-05 15:06:15
    sklearn.model_selection.train_test_split随机划分训练集和测试集 官网文档:...
  • K折交叉验证:传统的求准确度的方法是将整个数据分为训练集和测试集,并根据测试数据计算出准确度,但这并不是最佳方法,因此我们采用K折交叉验证是许多精度的平均值,并且它还提供了精度的标准偏差,这是评估模型的...
  • caffe测试精度与验证精度不一致

    千次阅读 2017-11-03 11:07:46
    看代码看了好一段时间都没有解决同一数据测试和训练验证时得到的精度不一致的问题 看到网上也有人问类似的问题,但解决方法对于我的情况都不适用 于是尝试删掉后面的.mean(1).mean(1),结果就意外地解决了...
  • 开发集和测试集

    千次阅读 2018-07-23 16:23:45
    1.1 数据同分布 ...开发集和测试集数据分布不同将会导致开发的系统在开发集上表现良好,但在测试集上却表现不佳。这种情况下解决方案就不那么明确了,此时可能存在以下一种或者多种情况: 1. 在...
  • 今天遇到个问题,保存训练完成的神经网络模型,来尝试跑了下测试集的结果,发现效果很差,和训练网络时跑测试集的结果不一样。查了些资料,发现是先eval()再测试数据的问题: 错误写法: ..... model = torch.load('...
  • 为解决这一问题,提出了基于测试代价敏感的可变精度分类粗糙模型。进一步地,通过分析传统启发式算法没有考虑测试代价以及回溯算法的时间消耗等因素,提出一种新的属性重要度测量,并在此基础上设计了一种新的启发式...
  • 这种现象乍一看不怎么符合常理,其实并不算罕见,主要问题在于训练集和测试集的分布差异可能比较大。 用生活中的例子来类比,平时做卷子的平均得分比正式考试时的的得分要。这种现象其实很常见,最可能的解释是...
  • 所以基于这个,那训练数据的时候,就不要使用验证集和测试集的相关信息,包括统计均值方差特征等,但是验证集可以在模型训练过程中进行模型调参,就是手动调一些外部参数,像是epoch、learningrate、dropoutprob等。...
  • 验证集,测试集区别

    千次阅读 2018-12-30 15:23:11
    而验证基本是在每个epoch完成后,用来测试一下当前模型的准确率。因为验证跟训练没有交集,因此这个准确率是可靠的。 事实上,对于一个模型来说,其参数可以分为普通参数和超参数。在不引入强化学习的前提下,...
  • 我对一份数据集构建了一个两层的baseline和一个深层的网络,两份模型在验证集上的表现是相同的acc 67左右,但是在测试集上两层的网络acc 37,后面这个深层的63,为什么会这样? 同样的训练集、验证集和测试集
  • MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》 目录 输出结果 实现代码 输出结果 后期更新…… 实现代码 loadspectra;...
  • 像sklearn一样,提供一个将数据集切分成训练集和测试集的函数: 默认是把数据集的75%作为训练集,把数据集的25%作为测试集。 2.交叉验证(一般取十折交叉验证:10-fold cross validation) k个子集,每个子集均做一...
  • 模型评估中测试集的选择方法

    千次阅读 2018-08-15 18:08:06
    为此,需使用一个“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得。但需注意的是,测试集应该尽可能与...
  • 问题描述:对于神经网络,在训练集上已经收敛,而测试集上的误差始终维持在一个很大的值,自始至终都不下降; 可能存在的原因分析: 欠拟合 首先排除欠拟合,因为网络在训练集上已经收敛 过拟合 如果出现过拟合...
  • 神经网络各个数据精度

    千次阅读 2018-04-25 17:25:22
    0. MNIST:BP: 98%1. Norb:BP: 88%左右2. cifar-10:BP: 50%《Understanding the difficulty of training deep feedforward neural networks》3. fashion-MNIST:其他:常用机器学习数据集精度
  • 训练集、验证集、测试集的作用

    万次阅读 多人点赞 2019-01-15 11:20:14
    在机器学习或者深度学习中,我们需要了解我们的模型包括什么:1)模型设计:①模型架构(包括模型有多少层,每层有多少个神经元);②可训练权重参数(模型内置参数);...验证(validation set)...
  • 数据分为训练验证测试 测试我们的模型 (Testing Our Model) Supervised machine learning algorithms are amazing tools capable of making predictions and classifications. However, it is important to ask ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,143
精华内容 35,257
关键字:

测试集精度低