写这篇博客的原因主要是为了总结下在深度学习中我们常会遇到的一些问题,以及不知道如何解决,我准备把这个部分作为一个系列,为了让大家少走一些坑,对于本博客有什么错误,欢迎大家指出,下面切入正题吧。

1. 深度学习,一个令人头疼的问题就是如何调参?

简而言之,如果数据集复杂的话,那么就要增加网络的层数,模型欠拟合了,加节点。

2. 关于验证集的loss曲线和acc曲线震荡,不平滑问题

出现loss震荡不平滑的原因可能如下:

(1) 学习率可能太大

(2) batch size太小

(3) 样本分布不均匀

(4) 加入正则化

3. 对于模型过拟合问题

(1) 换一个简单模型

(2) 增加数据

4. 对于自己定义的损失函数,如果我们加载模型常会提示loss出错,此时解决方法有两个:

(1) 首先用json保存模型用,然后保存权重,加载模型时,先load模型,然后载入权重

(2) load_model函数提供了参数,所以加载时需要加入这个参数,假设自定义参数loss的函数名为cosloss,所以加载时应采用以下方式

  1. model = load_model('model.h5', {'cosloss':cosloss})

5. 在keras中如果想输出训练过程中训练集合验证集准确值和损失值得变化,可以采用回调函数,具体参考以下方式:

  1. history=model.fit()
  2. plt.plot()
  3. plt.plot(history.history['val_acc'])
  4. plt.title('model accuracy')
  5. plt.ylabel('accuracy')
  6. plt.xlabel('epoch')
  7. plt.legend(['train', 'test'], loc='upper left')
  8. plt.show()
  9. # summarize history for loss
  10. plt.plot(history.history['loss'])
  11. plt.plot(history.history['val_loss'])
  12. plt.title('model loss')
  13. plt.ylabel('loss')
  14. plt.xlabel('epoch')
  15. plt.legend(['train', 'test'], loc='upper left')
  16. plt.show()

说明:如果你想把每个epoch的accuray结果保存在txt中也是可以的

  1. accy=history.history['acc']
  2. np_accy=np.array(accy)
  3. np.savetxt('save.txt',np_accy)

6. 如果训练中发现loss的值为NAN,这时可能的原因如下:

(1)学习率太高

(2)如果是自己定义的损失函数,这时候可能是你设计的损失函数有问题

7. 对于新手来说,一个比较困惑的地方可能就是不明白,loss值和acc之间的关系,有时候即使acc高,但是loss值也高

一般来说,较高的acc对应的loss较低,但这不是绝对,毕竟他们是两个不同的东西,所以在实际实现中,我们可以对两者进行一个微调。

8. 关于模型epoch轮数?对于一个新模型,迭代多少次才可以收敛,具体应该怎么设置

关于epoch设置问题,我们可以设置回调函数,选择验证集最高的acc作为最优模型。

9. 关于BN和dropout,应该使用哪个?

其实这两个是两个完全不同的东西,BN针对数据分布,dropout是从模型结构方面优化,所以他们两个可以一起使用,对于BN来说其不但可以防止过拟合,还可以防止梯度消失等问题,并且可以加快模型的收敛速度,但是加了BN,模型训练往往会变得慢些。

10. 这一条作为总结吧,多看看keras官方文档,里面基本能找到你需要的东西。这篇暂时就酱~

keras中的一些小tips(一)的更多相关文章

  1. Office 中的各种小tips(更新中)

    1.Word 中打字输入会擦掉之后原有字符,出现“吃字”的情况? 要将“改写”切换为“插入”,最简单的方法就是点击键盘上小键盘旁边的“insert”键. 其实仔细观察的话,在word文档下方,会看到如 ...

  2. keras搭建深度学习模型的一些小tips

    定义模型两种方法:  1.sequential 类仅用于层的线性堆叠,这是目前最常用的网络架构 2.函数式API,用于层组成的有向无环图,让你可以构建任意形式的架构 from keras import ...

  3. 你不知道的JavaScript--Item17 循环与prototype最后的几点小tips

    1.优先使用数组而不是Object类型来表示有顺序的集合 ECMAScript标准并没有规定对JavaScript的Object类型中的属性的存储顺序. 但是在使用for..in循环对Object中的 ...

  4. keras中的mini-batch gradient descent (转)

    深度学习的优化算法,说白了就是梯度下降.每次的参数更新有两种方式. 一. 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度.这种方法每更新一次参数都要把数据集里的所有样本都看 ...

  5. keras中的模型保存和加载

    tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. ...

  6. 深度学习基础系列(五)| 深入理解交叉熵函数及其在tensorflow和keras中的实现

    在统计学中,损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数.假设某样本的实际输出为a,而预计的输出为y,则y与a之间存在偏差,深度学习的目的即是通过不断地 ...

  7. 整理一些《纸书科学计算器》的小Tips

    本文最开始是在2016年的文章 Win10应用<纸书科学计算器>更新啦! 发表之后撰写的,当时那篇文章收到了不少人点赞,应用在国内市场的日下载量也突然上涨,让我感到受宠若惊,这里要感谢Wp ...

  8. 最近工作的一点小tips

    最近工作比较忙,但也积累了一些小tips,比较杂,不成系统,也并不很深入,就开一篇笼统的先记录一下,以后再深入挖掘. 1.-webkit-tap-highlight-color -webkit-tap ...

  9. Unity3D性能优化小tips——把this.transform缓存缓存起来

    Unity3D开发时中有一个小tips,这在官方的文档里其实有提及的,但不那么显眼,这里小说一下: 在MonoBehaviour进行编程时,我们经常会用this.transform, this.gam ...

随机推荐

  1. 058-PHP中goto语句的使用

    <?php for($i=1;$i<=5;$i++){ //使用for循环循环输出1~5 if($i==3) goto ECH; //当$i为3时候跳出for循环 echo "$ ...

  2. Web安全常见问题及解决方法

    关于Web安全,我们最早听到最多的就是SQL注入.例如用户在系统登录界面输入用户名和密码,提交以后,后端直接拿到数据就拼接SQL语句去查询数据库.如果在输入时进行了恶意的SQL拼装,那么最后生成的SQ ...

  3. Assignment写作谨慎学术抄袭是关键

    学术写作(Academic Writing)作为留学生涯的“必修课”,总是让闻者叹气,抓耳挠腮.初入课堂的留学生,更是缺乏写作经验不知从何下笔,只想仰天长啸“Essay真的好难啊!!”面对一个Essa ...

  4. Cobalt Strike简单使用(9,29第十五天)

    本文转自:https://www.cnblogs.com/yuanshu/p/11616657.html 一.介绍: 后渗透测试工具,基于Java开发,适用于团队间协同作战,简称“CS”. CS分为客 ...

  5. pppd调试心得.md

    描述 pppd是用于驱动3g模块的一种方式,其本质是和运营商APN协商,建立连接 其与运营商之间使用ppp协议,而用户在应用层使用系统提供的socket即可,从而忽略底层使用的时何种接口的设备,避免因 ...

  6. ng : File C:\Users\baron\AppData\Roaming\npm\ng.ps1 cannot be loaded because running

    一. Windos PowerShell 选择 管理员身份运行二.set-ExecutionPolicy RemoteSigned 然后更改权限为A 三.get-ExecutionPolicy 查看当 ...

  7. Jenkins-在CentOS7 上安装配置

    Jenkins-在CentOS7 上安装配置 1.安装JDK yum install -y java 2.安装jenkins 方法1:添加Jenkins库到yum库,Jenkins将从这里下载安装. ...

  8. HTML拖放

    <html><head><style>.droptarget {    float: left;     width: 100px;     height: 35p ...

  9. 已知root用户密码并登录,修改mysql用户名密码方法

    首先进入命令行下:以root用户登录,命令:mysql -uroot -p 回车 输入密码:mysql>use mysql:mysql>UPDATE user SET password=P ...

  10. django数据库读写分离

    django数据库读写分离 1. 配置数据库 settings.py文件中 用SQLite: DATABASES = { 'default': { 'ENGINE': 'django.db.backe ...