首先感谢大家还关注这个专栏,前段时间一直在写一本书,题为《21个项目玩转深度学习——基于TensorFlow的实践详解》。
简单地介绍一下,这本书的定位是深度学习+TensorFlow的入门实验书,希望提供一些在TensorFlow下常用的、并且真正能work的实践项目,方便初学者通过动手实验来快速入门。
目前该书已全面上架京东(https://item.jd.com/12327358.html),天猫(https://detail.tmall.com/item.htm?id=566399074299)、当当(http://product.dangdang.com/25245282.html)价格非常便宜,只需要60块钱。如果不想买书的话也欢迎来star这本书的Github:hzy46/Deep-Learning-21-Examples,全部项目的代码和运行方式已经整理上传了~~
有哪些实践案例
从难易度、实用性、趣味性考量,这本书选择了21个入门的项目,主要有三个大类:
- CNN、图像相关:包含图像分类、目标检测、人脸识别、风格迁移,同时包含GAN、cGAN、CycleGAN等和GAN相关的内容
- RNN、序列相关:文本生成、序列分类、训练词嵌入、时间序列预测、机器翻译等等。
- 强化学习:主要复现一些基础的算法,如Q Learning、SARSA、Deep Q Learning等。
所有项目都基于TensorFlow大于等于1.4.0的版本,具体案例如下:
一、CNN与计算机视觉:
基础的MNIST手写数字识别,你懂的。
在CIFAR-10(同样也是一个常用数据集,不过和MNIST不同的是它是三通道彩色图像)上训练一个图像识别模型。
从零开始,如何在自己的数据集上训练ImageNet模型进行图像识别。
书中提供了一个网上爬取的卫星图像数据集,共有森林、水域、岩石、湿地、冰川、城市六类共6000章图像。你将体验数据转tfrecord => 训练模型 => 调整参数 => 验证正确率 => 导出模型 => 使用导出模型测试单张图片的全过程。
一个比较有趣的图像生成模型,最初由Google公布,可以帮助我们理解卷积神经网络的特征背后的含义。
简单来说,极大化卷积网络某个通道的输出,就可以得到如下所示的展示该通道特征的图片:
目标检测,计算机视觉经典问题之一。这里以TensorFlow Object Detection API为例,在VOC2009数据集上,训练了一个Faster R-CNN模型,并且导出模型对单张图片进行检测,测试效果如下:
人脸检测和识别也是常见的项目。检测和对齐人脸用的是MTCNN,训练人脸模型用的是带有中心损失的CNN。
这章包含的内容有:验证已经训练好的模型的准确率、使用已经训练好的模型进行人脸识别、训练自己的模型。
7、图像风格迁移
神经网络的风格迁移,可以生成比较酷炫的图片,例如:
二、GAN以及它的几个重要变体
这章介绍了用GAN和DCGAN的基本原理,并利用DCGAN做了一个动漫人物生成Demo,生成的图片如下所示:
使用pix2pix模型将黑白图像转换成彩色图像,这一章有两个实验,分别是将黑白的食物图像和动漫图像转换为彩色图像。
上色效果如下(从左到右依次是,黑白图片、自动上色的图片、真实图片):
使用pix2pix模型,将模糊的图片还原为清晰的图片。
效果如下(从左到右依次为,模糊处理后的图片、清晰化后的图片、真实图片):
使用CycleGAN进行图片转换,做了两个实验:苹果变成橘子,男人变成女人。
三、RNN与自然语言处理
主要内容为:RNN、LSTM基础结构。介绍了一个比较简单的Char RNN的例子,它文本生成、机器写诗。
写诗示例:
何人无不见,此地自何如。
一夜山边去,江山一夜归。
山风春草色,秋水夜声深。
何事同相见,应知旧子人。
何当不相见,何处见江边。
一叶生云里,春风出竹堂。
何时有相访,不得在君心。
13、序列分类问题详解
一类数列为等差数列,一类数列为随机数列,使用RNN,达到99%的分类准确率。
词嵌入在各种自然语言处理问题时经常用到,这章使用Skip-gram方法训练一个词嵌入,并进行简单的可视化。
用TensorFlow来解决时间序列预测问题,预测方法包括传统的AR模型和LSTM模型。
预测效果如下(红色部分为预测值):
16、神经网络机器翻译技术
这一章会训练一个把英文翻译成中文的模型。
例如,输入英文:It is learned that china has on many occasions previously made known its stand on its relations with the g-8.
可以翻译为中文:据悉,中国曾多次表明同八国集团之间的关系。
使用的代码为TensorFlow NMT。
给定一张图片:
输出一句描述它的话,如”a man riding a wave on top of a surfboard .”
四、强化学习基础与深度强化学习
借助一个走迷宫问题,来讲解强化学习基础算法 —— Q Learning。
解决的问题和上一章类似,不过使用的算法是另一种强化学习基础算法SARSA。
训练一个DQN,来玩打砖块游戏。
训练一个策略梯度网络,来玩Cartpole。
为什么写这本书
去年6月份,电子工业出版社的一位编辑朋友找到我,希望能够帮忙编写一本以项目合集为形式的深度学习入门书。当时没有怎么犹豫就答应下来了,一方面,市面上确实缺少一本这样以实践案例组成的入门书,另一方面,我个人也觉得,实践是入门深度学习的的极佳方式,原因如下:
- 在学习的初期,这种方式具有趣味感、成就感,比较容易坚持
- 深度学习需要深厚的数理基础,对于初学者来说不是很友好,另外TensorFlow这个框架也不是很容易学习。使用具体例子来理解更加直观有效。
- 深度学习更偏向是一门“实验科学”。很多深度学习算法都存在一些无法用理论解释的trick和训练技巧,这些东西如果不是自己去经历一次是很难有直观感受的。
另外,在这个专栏中,我曾经写过很多比较有意思的深度学习实践项目。这本书是在专栏的基础上,添加了更多的项目,整理成册,希望提供一个比较完整的深度学习入门案例合集。
最后
最后大家如果对这本书有兴趣的话,可以猛戳下面的购买链接购买:
- 京东(https://item.jd.com/12327358.html)
- 天猫(https://detail.tmall.com/item.htm?id=566399074299)
- 当当(http://product.dangdang.com/25245282.html)
- 亚马逊(https://www.amazon.cn/dp/B07BF39RHQ)
也欢迎随时访问本书的Github:hzy46/Deep-Learning-21-Examples 吐槽、提issue,在这里谢谢各位啦,比心!