CNN和keras.fit_generator和一些心情(4-28)

CNN调参经验汇总

写在前面的累

最近忙的不亦乐乎,那种莫得方向的累。只是一名大学生而已,在这里吐吐槽,写一写收获的然后在跟大家伙不吐不快。
忙的与CNN调参有关所以这篇写的也是与CNN有关的内容


我还是先扯会皮
我跟着老师已经两年,但基本是孤军奋斗,师兄师姐主要是做迁移学习。我做着之前的大师兄的深度学习,所以是他带着我进入这个领域,然后就半年他就毕业了QAQ

按照顺序,我做过多层感知机、CNN、RNN,然后暑假放假自己抄《机器学习实战》的代码去学经典的机器学习算法(svm还是没看懂- =,估计现在连CNN链式推导也是手残),那年八月中旬觉得机器学习好无聊又开始做爬虫,回了学校师兄开心地说正好有任务!我就辛辛苦苦爬了半个月的数据(学了十天的爬虫的菜鸡能好到哪去= =完全靠找页面规律爬数据好么<-爬的是宗教性质的网站所以简单)。

之后写了一篇报告,写的乱七八糟给了老师,师兄后来吐槽说都是他帮我改的。之后又捣鼓了遗传算法,(强化学习看过但只是看过)。拿着遗传算法硬刚第二年的国赛建模,我也是挺厉害的。
中间也参加过天池的比赛,莫得说,一个菜鸡,只能说学会很多,但是都忘了嗝~~~。


好了,有了上述经历你才会明白我的经验是很粗糙,但是主观上觉得很实用的经验,因为基本上没有人指导,基本是放羊式的学习,效率很低,成果绝对不多,但是指导了很多东西才知道自己要啥。
所以!!
当你真的准备要认认真真学习CNN的时候可以来找我一起交流。
那么我觉有人问我,我会跟他说:

  • 选用你喜欢的包(tensorflow、pytorch、theano)

  • 学会使用各种封装的工具包(keras、tflearn)

  • 学会调参多动手


1.第一件事和第二件事

从跟随师兄用起tensorflow,我从来没用过其他库这不见的是个好事情,我听说pytorch更适合于平日自己的研究,不过tensorflow自己也发现自己的缺点,所以正在逐步完善tf.eager

上述的每一步都值得试一试,当然老师说用啥那就用啥吧,不吃老人言吃亏在眼前是没错的。

如果使用原生的tensorflow代码书写是很慢的,所以我强烈建议使用已经封装的工具包,我之前使用过tflearn因为个人其包使用的代码风格让我很舒服,可是当tensorflow自己说明将kerastf.contrib独立出来时以及师兄说自己也用这个时,我决定跟随先人们的步伐。

但是很重要的一点
–>我十分强烈自己能彻头彻尾使用的是同一种封装工具包,那么代码效率一定比现在高的多,不用每次写代码都要一次一次翻api(本人成绩不咋滴,平日里为了追上大佬们,基本上课期间不会做科研)。<–

2.第三件事

google确实比百度有用 本来我只是听过却不知道的,这段时间忙了之后,我承认了,查资料还是去google找吧,链接中也有如何有效查找需要资料的链接,学会查关键词,英语差点也没差的。(之前看了一篇关于如何查找资料的博客写的非常好,很可惜我忘了收藏了,等找到了再给大家)
所以当你遇到技术上的难题时,自己先动动手查资料再去问别人,虽然可能从此写代码十分钟,问个英语问题半小时,但是这样做应该是没错的。
等等
。。。。
所以
CNN调参在哪里?

Hello! 这里!

参考链接:

所有的建议都在上述链接中,我依然十分建议自己好好看看。我正在完善自己的英语能力,我认为我完整的翻译出上面的文章我会进行相关的翻译,也希望大家的支持,自己现在脑子里装的是:

  1. 不要相信训练准确率,一定保证有Validation Data
  2. 多借鉴现有网络的模块,如Inception模块残差模块。如何增加宽度和深度。
  3. BatchSize是很有用的,数量少了就好像只给你两个点去画一个抛物线,多了就是局部优值,可以去看看吴恩达的over fitting他的图片很好描述了这个状况。
  4. dropout放在maxpool之后,bn层放在激活层之后。
  5. 当你有多个训练集或者多个模型放在多个文件里时,使用os.system()(想到什么偷懒的方法尽管去搜,比我们更懒的早早想出了何时的方法)。

这绝对只是浅陋的经验,或者说只是用来做笔记给自己看的,请君随意阅读。

调参其实是我正在做的事情,我会慢慢学习,将笔记逐个上传至本文的最后,或者记录一些调参的心情。以上只是一些想说的话,想告诉大家而已。

讨论有一个觉得挺有用的东西
这里说一下keras.fit_generator的一个让我很抓狂的情况

...

    145/147 [============================>.] - ETA: 0s - loss: 1.5847 - acc: 0.5120
    146/147 [============================>.] - ETA: 0s - loss: 1.5838 - acc: 0.5117
...
#以上是一轮训练结束后,按理应该进入新的一轮,但是fit_generator会继续显示下列信息
...
     32/1567 [..............................] - ETA: 3:11 - loss: 1.8080 - acc: 0.4688
     64/1567 [>.............................] - ETA: 2:58 - loss: 1.7491 - acc: 0.5000
...
#经观察这是1567是我validation data的总数目,难道?我的val集也被训练了?当时是崩溃的。

经过提问和搜索,最终的答案是keras.fit_generator同样为validation data生成一个generator,于是测试也成一步一步的,但模型不会从这里学习到任何东西。
大家可以再看看我在stackoverflow上的提问


好了,学习到的就这么多。

但是心情是真的不怎么的,本人大三,在保研的边缘徘徊,上述的东西也是在论文修回的情况下一次一次试着改出来的。接近两个礼拜的时间多多少少都在做这论文里的东西,专业课确实落下了很多,但是又觉得做这件事的时候其实并不是专心的。

总有种里外不是人的感觉,当然,以上其实可以在很早的时候就应该完成,一直拖到现在才完成并不是很好。选择总是很重要的,时间安排总是重要的,当然了,心态更是重要了,毕竟像今天晚上,从西区教室自习为了吃一个橙子跑回东区水果店又来到实验打这么一篇文章可能也说明本身就是一个浮躁的人吧hhhh。

更新文章的速度比较慢,但是十分乐意看到大家与我私信交流,希望在这里结交到更多的朋友。

下次再见啦!
blush

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章