码迷,mamicode.com
首页 > 其他好文 > 详细

干货|给妹纸的深度学习教学(3)——用VGG19开荒

时间:2020-11-27 11:42:06      阅读:13      评论:0      收藏:0      [点我收藏+]

标签:noi   课程   drl   ima   原来   翻译   ras   建议   语音   

给妹子的深度学习系列教程
干货|给妹纸的深度学习教学(0)——从这里出发
给妹纸的深度学习教学(1)——从LeNet开始
干货|给妹纸的深度学习教学(2)——拿NIN试水
第三天的语音通话结束了,那趁热写一下文章吧,本文主要包括如下几个方面:

  • Machine Learning / Deep Learning 相关的学习资料/视频
  • 如何使用训练好的model进行预测
  • VGG network 简要介绍
  • 使用VGG19来训练cifar10
    代码依然在 Github上

1

蒙圈后给的一些资料

妹纸:对了,你那边有比较系统的深度学习和机器学习的资料吗,我舍友也想要。

花花:(懵逼。。)额,好像是有,那我晚点整理一下吧。

遂,花花整理之:

写在前面,以下部分网站需要「***」后食用,不在国内所以也不知道究竟被墙多少。

若无法***,请「自寻」国内资源,如百度网盘,b站转载 或 知乎它人提供的链接。

关于书籍

首推 Deep Learning 这本书,我花了700+RMB买了一本,这本书作者就不用多说了,GAN之父Ian Goodfellow 另外一个好消息就是,这本书在几个星期前出了中文版,大快人心,才100多块,真心便宜, 赶紧入手一本吧,圣经就算不读也可以供在家里吖。
当然,你也可以从 deeplearningbook-chinese 下载本书的PDF啦

如果完全没有基础,建议还是要先学ML比较好,手头有李航的统计方法学,,不过没看几页,然后是周志华老师的西瓜书,也没看几页,2333.

关于课程

其实已经不太推荐 Andrew Ng 的 ML了,因为有太多更好的代替品;

台大 李宏毅 老师最近出了一系列视频,你可以在它的个人网站上找到
* Machine Learning (2017,Spring)
* Machine Learning (2016,Fall)
* Machine Learning and having it deep and structured (2017,Spring)这门课叫做MLDS,其实就是在讲Deep Learning,而且homework非常有意思,有GAN也有RL,关键是老师讲得确实很好,值得推荐;
* 另外就是李宏毅老师的《一日搞懂深度学习》,其实链接 全都在老师的个人网站上,8月13号在台北还有他的talk《一日搞懂生成对抗网络》,同学有报名去听,我的话,没钱啊。。2333.
* 其实李老师的所有视频都在他的YouTube上。

还有台大 林軒田 老师出的公开课《机器学习基石》和《机器学习技法》。老师讲得很好,PDF做得也很棒,毕竟林老师曾经是多届 KDD Cup 的冠军啊
* Machine Learning Techniques, Spring 2017
* Machine Learning Foundations, Fall 2016

最最推荐的其实是 Fei-Fei Li 的 CS231n,这门课就真心赞了,video, slide,note都写得非常好。课程的视频,在YouTube上面也能轻松找到。
* CS231n: Convolutional Neural Networks for Visual Recognition
* 知乎还有翻译 贺完结!CS231n官方笔记授权翻译总集篇发布

或者是 CS224d: Deep Learning for Natural Language Processing

关于Reinforcement Learning的课程和资料
首推 AlphaGo 团队的 Leader — David silver 的 Reinforcement Learning ,我最开始学DRL的时候就是看他的视频和slide,真的很赞。

以及Berkeley 的 DRL : CS 294 Deep Reinforcement Learning, Fall 2017
另外,RL的鼻祖Sutton最近也在干大事,正在写Reinforcement Learning: An Introduction 的 第二版

其实学习RL最好的 Demo 就是 用 强化学习来 玩 2048 了,我们lab有世界上第一个用 TD learning 玩出 65536 的 AI,另外如果有机会想写一个关于RL的专栏,主要是DeepMind 的 paper,不过太菜了估计写了也没人看
* 重现看这里
* 超级精简版code 看这里

终于被你滚到底了

好,回到正题,今天和妹纸讲了如下这些东西。

2

使用训练好的模型来进行预测

花花:先来看个有意思的把,既然今天我们讲VGG,就先用别人训练好的VGG模型来进行图片分类的预测吧。

妹纸:好啊好啊,快给我看。

花花:下面你看我写好的一个 程序,是用别人已经训练好的weight,来预测图片。

import kerasfrom keras.applications.vgg19 import VGG19from keras.applications.vgg19 
import preprocess_input, decode_predictionsfrom PIL 
import Image
import numpy as np
import os.pathmodel = VGG19(weights=‘imagenet‘)
while True:
    img_path = input(‘Please input picture file to predict ( input Q to exit ):  ‘)
    if img_path == ‘Q‘:
        break
    if not os.path.exists(img_path):
        print("file not exist!")
        continue
    try:
        img = Image.open(img_path)
        ori_w,ori_h = img.size
        new_w = 224.0;
        new_h = 224.0;
        if ori_w > ori_h:
            bs = 224.0 / ori_h;
            new_w = ori_w * bs
            weight = int(new_w)
            height = int(new_h)
            img = img.resize( (weight, height), Image.BILINEAR )
            region = ( weight / 2 - 112, 0, weight / 2 + 112, height)
            img = img.crop( region )
        else:
            bs = 224.0 / ori_w;
            new_h = ori_h * bs
            weight = int(new_w)
            height = int(new_h)
            img = img.resize( (weight, height), Image.BILINEAR )
            region = ( 0, height / 2 - 112 , weight, height / 2 + 112  )
            img = img.crop( region )
        x = np.array( img, dtype = ‘float32‘ )
        x[:, :, 0] = x[:, :, 0] - 123.680
        x[:, :, 1] = x[:, :, 1] - 116.779
        x[:, :, 2] = x[:, :, 2] - 103.939
        x = np.expand_dims(x, axis=0)
        results = model.predict(x)
        print(‘Predicted:‘, decode_predictions(results, top=5)[0])
    except Exception as e:
        pass

我们用拼图,老虎,猫 三张图片来测试一下:

技术图片

可以看到,结果如下,第一张预测出来是jigsaw_puzzle,概率是99%,第二张是老虎,第三张是一种猫,看起来我们的model还是不错的,呜呜。
技术图片

3

VGG Network架构简要介绍

花花:嗯,我们用到的这个model就是VGG19了,我给你稍微讲下这个架构吧。

妹纸:嗯嗯,好的,这个看起来挺好玩的。

Vgg Network: Very Deep Convolutional Networks for Large-Scale Image Recognition
花花:VGG是在2014年的 ILSVRC localization and classification 两个问题上分别取得了第一名和第二名的网络架构,也是一个具有里程碑意义的CNN架构,其中最令人震惊的就是它的深度,在当时看来,绝对算一个非常非常深的网络架构,VGG16,16层,而我要和你讲的VGG19,有19层之多。不过现在看来就很一般了啦,下次给你讲Residual Network你就知道网络可以多深了。

妹纸:咦。为什么叫VGG19呢?

花花:哦,是因为VGG是Visual Geometry Group 这个实验室发明的,所以就叫VGG了,就像我们lab的围棋程序,刚好也叫我们lab的名字。

妹纸:哦哦,这样啊。

花花:来看它的架构
技术图片

最后一个就是VGG19,总共19层,包括16层卷积层和最后的3层全连接层。中间和往常差不多,用的是池化层,最后经过softmax。

我们把它稍微改一下,因为原本是用的ImageNet的dataset,预测是1000类,这里我们需要换成适合cifar10的架构,嗯。

技术图片

开始训练


技术图片

如上图所示,我将会进行这几个实验:

  • Model的weight使用random initial的方式
  • 使用已经train过的VGG19的weight进行retrain

技术图片

在使用朴素的random init方式,在GTX1060的训练时间大概是3小时10分钟,效果并不好,只有90.99%和92.38%

使用weight进行retrain

然后我们使用retrain的方式,就是用原来在ImageNet 上练好的weight作为初始化,然后再进行训练,Keras里面读取weight方法如下:

# load pretrained weight from VGG19 by name      
model.load_weights(filepath, by_name=True)
  • WI 指的是MSRA的何凯明大佬的weight initial方法
  • WD 指的是Weight Decay,上次我们讲过了

效果似乎还是不太理想啊。再改进点什么嘛??

再试试Batch Normalization

花花:最后,我们再加上BN(Batch Normalization), 同样,加上BN后训练时间(GTX1060下测试)从3小时10分钟变为了4小时。
不过我们惊奇地发现,准确率再次提高了。

当 WD = 0.0015 的时候,效果最好,嗯,毕竟有效防止了overfitting嘛。

妹纸:哇,到94%了,好棒。

……

……

妹纸:晚上和舍友去看电影,我就先去吃饭了噢。

花花:嗯嗯,那明天再聊咯。。。。

推荐阅读:

精选干货|近半年干货目录汇总
深度学习的这些坑你都遇到过吗?神经网络11大常见陷阱及应对方法
干货| 台湾大学林轩田机器学习基石课程学习笔记8 -- Noise and Error

           欢迎关注公众号学习交流~          

技术图片

欢迎加入交流群交流学习

技术图片

干货|给妹纸的深度学习教学(3)——用VGG19开荒

标签:noi   课程   drl   ima   原来   翻译   ras   建议   语音   

原文地址:https://blog.51cto.com/15009309/2553785

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!