精华内容
下载资源
问答
  • 运行代码时train_accval_acc均为0

    千次阅读 2020-08-27 22:11:14
    部分代码如下: ... % (epoch + 1, train_loss / 2000 ,train_acc/2000,val_loss/800,val_acc/800, end_time-start_time)) 解决方法:设定train_accval_acc数据类型为double即可正常显示。 print('epoch

    部分代码如下:

    print('epoch %d, train_loss %.4f, train acc %.3f,test_loss %.4f, test acc %.3f, time %.1f sec'
    	% (epoch + 1, train_loss / 2000 ,train_acc/2000,val_loss/800,val_acc/800, end_time-start_time))
    

    解决方法:设定train_acc和val_acc数据类型为double即可正常显示。

    print('epoch %d, train_loss %.4f, train acc %.3f,test_loss %.4f, test acc %.3f, time %.1f sec'
     % (epoch + 1, train_loss / 2000 ,train_acc.double()/2000,val_loss/800,val_acc.double()/800, end_time-start_time))

    在这里插入图片描述

    原因不解,有知道的大佬可以讲一下。

    展开全文
  • (2)为什么要训练多个epoch,即数据要被“轮”多次 在神经网络中传递完整的数据集一次是不够的,对于有限的数据集(是在批梯度下降情况下),使用一个迭代过程,更新权重一次或者说使用一个epoch是不够的,需要将...
  • 今天解决了accval_acc一直为1.000的奇怪问题之后(原来是label标错了o(╥﹏╥)o),终于走上了正式的调参之路。 先看一下训练结果: 可以看到: 1.验证集准确率val_acc>训练集准确率train_acc。查资料,属于...

    2020/5/9 日记录

    今天解决了acc 和val_acc一直为1.000的奇怪问题之后(原来是label标错了o(╥﹏╥)o),终于走上了正式的调参之路。
    先看一下训练结果:在这里插入图片描述
    可以看到:
    1.验证集准确率val_acc>训练集准确率train_acc。查资料,属于正常情况,不过也有可能有一些问题,先观察着。
    2. 随着epoch迭代,验证集准确率val_acc保持不变了!这不就是传说中过拟合的征兆吗?引用另一篇博客的话 :“我们之前把数据集切分为训练集,测试集和验证集。验证集就是用来检测模型overfitting。
    一旦在验证集上,准确性不在变化(收敛了),那么我们就停止训练。”

    在程序中已经设置了早停earlystoping ,是这样写的:

      # 是否需要早停,当val_loss一直不下降的时候意味着模型基本训练完毕,可以停止
        early_stopping = EarlyStopping(
                                monitor='val_loss', 
                                min_delta=0, 
                                patience=10, 
                                verbose=1
                            )
    

    是以val_loss为监测标准的。min_delta 代表的是容忍度,val_loss最少要下降所少才算数。这里设置的是0,也就是说,只要下降,哪怕是0.0000001也算数,不会停止训练,还是会继续下一个epoch训练。

    看这连续4个epoch,val_acc都不变,过拟合实锤了。现在要解决的问题:

    val_acc保持不变是怎么个情况?好不好?怎么解决?有可能是什么原因?

    以下转载自知乎https://zhuanlan.zhihu.com/p/92729376

    “ loss不收敛包含两种情况,一种是loss一直在震荡,一种是loss下降一点后不再下降到理想水平,而验证集上的表现保持不变.”
    采取措施如下:

    "1.保持需要的batchsize不变;
    2.查看是否有梯度回传,查看代码如下:

    for name, parms in model.named_parameters():
    	print('-->name:', name, '-->grad_requirs:', parms.requires_grad, '--weight', torch.mean(parms.data), ' -->grad_value:', torch.mean(parms.grad))
    

    3.查看数据是否有问题,如标签错乱等现象;
    4.调节学习率,从大向小调,建议每次除以5;我的项目即是因为学习率过大过小都不收敛引起的;
    5.如果学习率调好后,需要调节batchsize大小,如batchsize调大2倍,则将学习率对应调大(项目测试调大2~3倍OK),反之,学习率对应调小"

    总的来说:调参吧。

    于是:将学习率初始值改为0.0001,竟然意外地好用:

    展开全文
  • val_acc一直不变

    千次阅读 2020-02-11 20:55:21
    val_loss一直不变的原因 之前用keras编写了LSTM模型,做图片分类,自己划分了测试集和训练集,但是得到的结果是每个epoch训练的准确率都不变。 探索 我一直以为是我的数据的读取方式不对,我一直在从这方面下手,...

    val_loss一直不变的原因

    之前用keras编写了LSTM模型,做图片分类,自己划分了测试集和训练集,但是得到的结果是每个epoch训练的准确率都不变。

    在这里插入图片描述

    探索

    我一直以为是我的数据的读取方式不对,我一直在从这方面下手,但是后来我发现根本不是这个原因,也找到了解决方案,具体原因有三点,三点是递进关系。

    1.数据集样本各类别数量差距大

    如果没有这种情况就看看第二点。

    2.训练集和数据集是手动划分的,改为代码自动划分
    代码如下:

    X_train, X_test,Y_train, Y_test = train_test_split(data, labels, test_size=0.4, random_state=42)```
    

    上述方法要多设置几个epoch,要有耐心的等,如果还是测试的准确率还是不变,那就可能是第二个原因。

    3. 训练模型不适用,或者模型参数不恰当,建议调参,或者改算法

    如果第一个方法还是不行那就可能是算法不适合这个数据集,可以打印混淆矩阵看一下,是不是分类错误率太高,比如我的数据集,做二分类,结果第二类全分到第一类了。

    展开全文
  • 本文:训练过程的可视化包括训练集和验证集的acc和loss曲线,根据曲线的不同特点进行超参数调节,可以不断优化网络,总结以下一些曲线特点。 开发环境:TensorFlow + Keras + Python 问题类型:二分类问题 数据集:...

    文章目录
    前言

    1. 验证集曲线震荡
      分析原因:训练的batch_size太小
      总结
      前言
      本文:训练过程的可视化包括训练集和验证集的acc和loss曲线,根据曲线的不同特点进行超参数调节,可以不断优化网络,总结以下一些曲线特点。
      开发环境:TensorFlow + Keras + Python
      问题类型:二分类问题
      数据集:训练集7170个样本 正负各一半 分类为1/0,验证集划分0.15
      独立测试集共600个样本 正负各一半
    2. 验证集曲线震荡
      在这里插入图片描述

    分析原因:训练的batch_size太小
    目前batch_size = 64,改成128:
    在这里插入图片描述

    改成200:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    可见,增大batch_size 变大,震荡逐渐消失,同时在测试集的acc也提高了。batch_size为200时,训练集acc小于测试集,模型欠拟合,需要继续增大epoch。

    总结
    增大batchsize的好处有三点:
    1)内存的利用率提高了,大矩阵乘法的并行化效率提高。
    2)跑完一次epoch(全数据集)所需迭代次数减少,对于相同的数据量的处理速度进一步加快,但是达到相同精度所需要的epoch数量也越来越多。由于这两种因素的矛盾, batch_Size 增大到某个时候,达到时间上的最优。
    3)一定范围内,batchsize越大,其确定的下降方向就越准,引起训练震荡越小。
    盲目增大的坏处:
    1)当数据集太大时,内存撑不住。
    2)过大的batchsize的结果是网络很容易收敛到一些不好的局部最优点。
    3)batchsize增大到一定的程度,其确定的下降方向已经基本不再变化。
    4)太小的batch也存在一些问题,比如训练速度很慢,训练不容易收敛等。
    5)具体的batch size的选取和训练集的样本数目相关。
    参考:loss曲线震荡分析

    展开全文
  • ``` (2).fit_generator函数 那么.fit_generator函数为什么就能够进行数据增强呢? 数据数据增强后,用于训练的数据集将是不断变化的。如果把.fit函数看作是把所有的数据集一次全都输入到网络中,那么.fit_...
  • Warning: Can save best model only with val_acc available, skipping

    千次阅读 多人点赞 2020-08-22 13:43:50
    解决keras保存最优模型时出现Warning: Can save best model only with val_acc available, skipping
  • 主要介绍了浅谈keras中loss与val_loss的关系,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 初始网络代码(数据处理部分未晒出,传给网络的参数就是x_test,y_test,x_train,y_train) import tensorflow import keras from keras.layers.normalization import BatchNormalization from keras.utils import ...
  • 程序运行出现KeyError: ‘acc’ 和KeyError: 'val_acc’的错误。 解决方法: 在Keras 2.3.0中,矩阵的报告方式已更改为与指定的确切名称相匹配。 如果您使用的是较旧的代码或较旧的代码示例,则可能会遇到错误。 ...
  • 我试图在keras中绘制训练和测试学习曲线,但是,下面的代码产生了KeyError: 'val_acc error。 正式文档<https://keras.io/callbacks/>指出,要使用该代码,'val_acc'我需要启用验证和准确性监视,这些我不...
  • 函数定义 数组的高阶函数reduce: arr.reduce(function(array,prev,cur,index){}) prev:上一次调用的返回值,默认为0,可以... 常用代码: 1.去重 var array = [1,2,3,2,3,4]; var diffarr = arr =>...
  • 之所以会出现KeyError: ‘accuracy’、KeyError: ‘acc’、KeyError: 'val_acc’等报错信息,是由于keras库(一个开源人工神经网络库,用于构建和训练深度学习模型的高级 API)版本不同所造成的; train_loss = ...
  • ♣题目部分报错信息之KeyError: 'accuracy' 报错信息之KeyError: 'val_acc'和KeyError: 'acc&...
  • 首先,之所以会出现KeyError: ‘accuracy’、KeyError: ‘acc’、KeyError: 'val_acc’等报错信息,是由于keras库(一个开源人工神经网络库)版本不同所造成的,下面分别就其进行简述之。 Index 目录索引报错信息之...
  • 训练模型时出现,只能打印val_loss和loss,metrics['acc']不能用, 使用tensorboard 可视化acc和loss迭代趋势时,只显示loss与val_loss 看了很多网上教程,也尝试了自己写回调函数,发现结果是一
  • ax1.set_xlabel('Epoch') ax2.plot(history['train_acc'], label='train acc') ax2.plot(history['val_acc'], label='val acc') ax2.set_ylim([-0.05, 1.05]) ax2.legend() ax2.set_ylabel('Accuracy') ax2.set_...
  • 可参考代码如下: # -*- coding: utf-8 -*- import matplotlib.pyplot as plt if __name__ == '__main__': train_loss = 5 val_loss = 5 train_acc = 0.0 val_acc = 0.0 x = [] train_loss_list = [] val_...
  • 在tensorflow训练完模型,我直接采用同一个session进行测试,得到结果较好,但是采用训练完保存的模型,进行重新载入进行测试,结果较差,不懂是为什么会出现这样的结果。注:测试数据是一样的。以下是模型结果: ...
  • 代码实现:# -*- encoding: utf-8 -*-import sysimport csvimport timeimport numpy as npimport torchimport torch.nn as nnfrom torch.utils.data import TensorDataset, DataLoaderdef read...
  • KeyError: ‘accuracy’、KeyError: ‘val_acc’、KeyError: 'acc’等报错信息的解决方法 参考链接1 参考链接2 在使用matplotlib对机器学习结果进行绘图时,报了该错误 我的显示训练图的函数代码为: def show_...
  • 根据acc代码,只有在分母为0的时候才会出现Nan的情形,以coco为例,badIdxCount是17,造成nan。 为什么badIdxCount会是17呢? 返回的全是-1,为什么会返回全是-1? 只能是给出的17个部位的标签全部是1...
  • check = ModelCheckpoint("./tmp/ckpt/singlenn_{epoch:02d}-{val_acc:.2f}.hdf5", monitor='val_acc', save_best_only=True, save_weights_only=True, mode='auto', period=1) 运行这部分代码时,出现
  • 因为batch_norm的两个平移缩放参数在训练的时候没有更新,需要手动更新一下 step = tf.get_variable("step", [], initializer=tf.constant_initializer(0.0), trainable=False) optimizer = tf.train....
  • 我就废话不多说了,大家还是直接看代码吧!#加载keras模块from __future__ import print_functionimport numpy as npnp.random.seed(1337) # for reproducibilityimport kerasfrom keras.datasets import mnistfrom ...
  • # 在输出结果中取前maxk个最大概率作为预测结果,并获取其下标,当topk=(1, 5)时取5就可以了。 _, pred = torch.topk(output, k=maxk, dim=1, largest=True, sorted=True) # 将得到的k个预测结果的矩阵进行转置...
  • 1.为什么一定要分成三部分数据集 2.形象解释各自的作用 以上两个博客解释的非常清楚。值得注意的是: 首先用训练集训练出模型,然后用验证集验证模型(注意:这是一个中间过程,此时最好的模型还未选定),根据情况...
  • JavaScript代码规范(一)

    千次阅读 2020-05-07 11:48:04
    这不是一个代码风格指南, 它是一个使用 JavaScript 来生产 可读的, 可重用的, 以及可重构的软件的指南。 这里的每一项原则都不是必须遵守的, 甚至只有更少的能够被广泛认可。 这些仅仅是指南而已, 但是却是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,671
精华内容 5,068
关键字:

代码结果valacc是什么?