on
全方位覆盖实践项目的PyTorch入门书
- 《PyTorch深度学习实战》书评
- 豆瓣链接
很久之前学习过PyTorch和深度学习模型的训练,但不久后转去做了其他方向。最近又开始做物体检测之类的项目,所以拿起了这本书复习一下和PyTorch有关的内容。
因为作者之一的伊莱·史蒂文斯的医学背景,本书的项目是通过CT图像给肺部结节分类,并通过实践来介绍PyTorch的使用。如果正好做医学图像这个方向,本书会十分有用。也确实有不少的创业公司都在开发这方面的业务,我觉得比单纯的谈论猫狗分类和GAN生成人脸的例子更加具有实际意义。
第二章从一个有趣的例子CycleGAN入手,把照片里的马变成斑马,而不是一上来就讲张量和卷积之类的基础知识。先关注能做什么,而不是具体怎么做。之后作者们铺垫了一些关于张量和如何处理数据的基础知识,并且实现了一个简单的分类网络。
和其他泛泛而谈的入门书籍不同的是,本书从第九章开始,使用了较大的篇幅全方位的介绍了如何一步步搭建CT图片分类的项目,很多步骤都有很强的实用性。比如书里举了许多使用现有模型的例子,比如使用预训练的resnet,和开源的unet模型,在实际工程中有不少情形都是用预训练好的模型,而非从零实现一个模型,所以这部分对实践很有帮助。
除了一些常规的话题,比如tensorboard可视化,和衡量模型优劣的AUC指标等,本书还介绍了如何部署模型。我在实际开发中确实遇到了需要转成onnx,或者使用libtorch的情形,所以这部分内容的编排对我而言很有帮助。在工程中部署模型的时候,需要了解量化的概念,这在书里也有介绍。
书的呈现方式对新手也比较友好,手绘风格的插图有head first系列图书风格,很直观。书中的代码注释并不是常规的行内注释,而是单独写在了旁白的位置,更加醒目。有些页脚的备注非常有用,指出了实践会遇到的问题。比如可以使用nn.BCELossWithLogits()来替代nn.Sigmoid()和nn.BCELoss()。书的翻译总体而言还可以,有些译者注也补充了英文原版没有说清楚的地方。
在阅读本书的时候,也发现了一些可以改进的地方。翻译通常是中文版的外文科技书的软肋,本书翻译的句子,有些非常的长,而且有点儿翻译腔,有时候增加了理解的难度。技术类书籍中,代码的排版是另一大挑战。虽然书里对于代码的呈现不太影响阅读体验,但代码如果能够按照jupyter notebook那样带颜色的显示会更方便。
技术类的书籍,难免会遇到版本更新带来的滞后。PyTorch 1.12.1对一些API做了更新,和书里的用法已经不一样了,比如使用预训练模型的时候,用resnet50(weights=ResNet50_Weights.DEFAULT)来初始化参数,而不是之前的pretrained=True,不过大部分基础的API还是一致的,不影响对PyTorch的理解。
可能是为了把笔墨更多放在项目实践上。对于一些细节,书中并没有覆盖的很全面,比如讲解反向传播的时候只是用了一个简单的华氏温度到摄氏温度转换的例子,感觉不够全面,如果可以加上多层网络的反向传播讲解就更好了,这部分可以看看《深度学习的数学》(ディープラーニングがわかる数学入門)加深理解。还有介绍dataset类的时候,没有介绍在物体检测领域比较常用的collate_fn。本书结合Andrej Karpathy的A Recipe for Training Neural Networks食用,可以了解更多关于如何训练网络的细节。
最后医学图像的数据集太大了,最好提供一个小规模的数据集方便快速看结果,比如nuScenes提供的v1.0-mini数据集就是个很好的例子。如果能结合kaggle网站上已有的比赛来准备数据和输出格式更好,因为格式更加标准,数据也更易于获取。
总之本书适合新手入门,可以带领读者上手做一些简单的项目,比如简单的图片分类和分割。从如何创建数据集,训练和监督各项指标,到衡量模型的结果,再到模型的部署都有涵盖。但遇到大型的工程项目和比较新的架构,比如ASPP之类的,还需要多做项目,多看源码,在实践中学习。