绿林网

《深度学习入门》读后感1000字

《深度学习入门》读后感1000字

《深度学习入门》是一本由[ 日] 斋藤康毅著作,人民邮电出版社出版的平装图书,本书定价:59.00元,页数:285,特精心收集的读后感,希望对大家能有帮助。

《深度学习入门》读后感(一):力荐这本轻巧便携的深度学习口袋书!

提到深度学习,很多人入门会选择花书、西瓜书,但是这些书理论讲解过于详细且深刻,厚厚的书本很容易让初学者对深度学习逐渐失去兴趣,很难啃下去,所以我更推荐这本红色的《深度学习入门》作为初学者打开深度学习大门的钥匙,这本书很轻便小巧,一天的时间足以看完,章节安排得十分合理,虽然并不会详细的展开每个知识点,但是我认为初学者应当先对深度学习网络的框架有一个概括性的认识,而不是一上来就钻研其中某个公式的原理。当我阅读完这本书之后,对一些基础的概念以及深度学习模型是怎样工作的有了一个很深刻的认识,并且跟着书中的指引可以自己动手搭建一个较为简单的模型,对于初学者来说,这是一个性价比很高的提升方法。弄懂这本书的内容之后,我们再去看花书、看西瓜书就不会觉得非常晦涩难懂了。

《深度学习入门》读后感(二):深度学习启蒙

我觉得此书称为《深度学习启蒙》更为合适。

短短不足300页的篇幅(精简了很多内容,比如砍了RNN),全书贯彻作者“从零开始”的哲学,只借助numpy和matplotlib库一步步手把手教你搭建一个深度网络来训练MNIST手写数字数据集。虽然过程缓慢,内容少,但效果绝佳,尤其是提供的全书Github代码十分优雅。相信拿《深度学习》(花书)入门已经劝退不少人了,我觉得此书作为学院派教材的补充读物也是极好。深度学习DL是实践的学科,一上来就全是公式推导,好不容易啃完了连个demo都不会写,还是挺挫败的。不过此书也不会教你tensorflow或pytorch…

“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之”,深以为然。作者还有3本续作以及DL四大名著就先告辞了[裂开]最后贴个二成品笔记[吃瓜]https://www.cnblogs.com/xycsee/p/16335796.html

全书思维导图

《深度学习入门》读后感(三):深度学习的入门圣经

我是人工智能方面的编程新手。今年看了很多人工智能的学习书籍,很多内容非常生硬,我无法理解,看到豆瓣上的推荐,所以我决定从这本书继续读下去学习。我用了11天读完,每天读一点。根据我的经验,我估计大部分人也能和我一样即使基础一般,但也能流畅的读下去。

至于书的印象,好像每章都在逐渐的升华。即使是我这样的初学者也会觉得容易,因为本书内容对初学者十分的友好。这本书解释了如何实现一个模仿人脑神经回路机制的神经网络,以及如何学习它,使用图形公式和使用 Python3 的实现。

通过阅读本书,你将能够想象计算机是通过什么样的过程来学习(本书中主要是字符识别)等看似模棱两可、标准难以界定的事物。作者把内容简化到可以理解的程度, 如果你有本科阶段最基础的数学知识(主要是微分、矩阵和序列),就可以轻松理解。

在学习机器学习方面,我看过的很多本书都使用框架,很少有书详细解释事情是如何完成的。然而,这本书从头开始构建深度学习,不依赖框架。作者结合使用验证数据的实例,证明了高效的实现方法及其理论等,并描述了python实现代码。

感谢作者,他写出除非我在相关研究机构做科研工作的环境中才能知道的技巧。这本书使我对深度学习产生了很强的兴趣。 本书不会给你从头开始构建机器学习模型的技巧,但会让你大致了解将什么样的机器学习模型(层、函数)用于什么样的问题。

总之,这是一本很棒的书。 没有其他对初学者如此友好的“入门书”。 许多机器学习书籍自称是面向初学者的,但其内容往往是技术术语和代码,几乎没有解释。 我曾经对这种自称入门书感到沮丧,但这次,我被这本书震撼了。 它拥有初学者真正需要的所有信息。 另外,既然强调“自己动手学习”,那也不是光凭知识就什么都做不了。 如果您即将开始学习机器学习,那么这是您绝对应该选择本书!

《深度学习入门》读后感(四):机器学习的自然美感

之所以读这本书,是因为今年给自己定下来的目标:技术视角广度的延伸之一是机器学习命题。为什么定这个目标呢,直接源于两个主要的影响。

- 早几个月逛一亩三分地,看到地里讨论的目前硅谷程序员的技术栈,后端(Server Side)基本是标配ML(机器学习/深度学习)的

- 在推上关注的一个独立开发者(ServerCat的作者),本职是个iOS客户端开发,却成功通过在产品中集成机器学习的能力,做出了非常优秀的作品:熊猫吃短信-基于文本特征的垃圾短信过滤 & DAMA-基于深度学习自动打码图片敏感信息

这两点给我带来非常大的触动,让我感受到机器学习的巨大威力和社区印象力。

其实早在2017年,我就试图入门过机器学习,当时还在jizhi社区(jizhi.im)上购买了相关的课程:

当时我还在公司组织大家一起学习,做了一个王者荣耀手游英雄的简易分类器:

为什么最终还是没持续学习呢?

我觉得最主要的原因,就是一直没有合适的教材,当年的机器学习的学习资料,充斥着非常复杂的推导公式和数据理论,实在是令人望而却步。

《深度学习入门》这本书,说来也是一个契机,恰好也是上面提到的那位iOS开发同学推荐的。11月13日EDG决赛夺冠那天,约了好友一起观赛,带着在地铁上打发时间用的,没想到读了一部分后就被吸引了。

这本书没有那么多的公式,推导更多是直观的,感性的,显然作者不是为了追求或严谨或高深的对一门技术的显摆,而是娓娓道来,恨不得再浅显易懂一些。

这里的描述彻底打动了我,尽管机器学习的理论非常复杂,数学求证非常晦涩,但是它现在呈现出的形态是多么自然,多么符合直觉。

想起来摆在案头的吴军的《数学之美》,还有同样读了到开头的《素数之恋》,他们都想传达出来的,都是一种纯粹和自然的美感,这些恐怕都是饱经应试教育洗礼的我,迟迟无法体会到的。

相见恨晚,为时未晚,得把上面两本书再放进阅读日程了。

已修改 0/20

还未开始修改

预览 提交修改

《深度学习入门》读后感(五):使用深度学习进行图像分类

使用深度学习进行图像分类

解决任何真实问题的重要一步是获取数据。Kaggle提供了大量不同数据科学问题的竞赛。我们将挑选一个2014年提出的问题,然后使用这个问题测试本章的深度学习算法,并在第5章中进行改进,我们将基于卷积神经网络(CNN)和一些可以使用的高级技术来改善图像识别模型的性能。大家可以从https://www.kaggle.com/c/dogs-vs-cats/data下载数据。数据集包含25,000张猫和狗的图片。在实现算法前,预处理数据,并对训练、验证和测试数据集进行划分是需要执行的重要步骤。数据下载完成后,可以看到对应数据文件夹包含了如图3.6所示的图片。

图3.6

当以图3.7所示的格式提供数据时,大多数框架能够更容易地读取图片并为它们设置标签的附注。也就是说每个类别应该有其所包含图片的独立文件夹。这里,所有猫的图片都应位于cat文件夹,所有狗的图片都应位于dog文件夹。

图3.7

Python可以很容易地将数据调整成需要的格式。请先快速浏览一下代码,然后,我们将讲述重要的部分。

上述代码所做的处理,就是获取所有图片文件,并挑选出2,000张用于创建验证数据集。它把图片划分到了cats和dogs这两个类别目录中。创建独立的验证集是通用的重要实践,因为在相同的用于训练的数据集上测试算法并不合理。为了创建validation数据集,我们创建了一个图片数量长度范围内的数字列表,并把图像无序排列。在创建validation数据集时,我们可使用无序排列的数据来挑选一组图像。让我们详细解释一下每段代码。

下面的代码用于创建文件:

glob方法返回特定路径的所有文件。当图片数量巨大时,也可以使用iglob,它返回一个迭代器,而不是将文件名载入到内存中。在我们的例子中,只有25,000个文件名,可以很容易加载到内存里。

可以使用下面的代码混合排列文件:

上述代码返回25,000个0~25,000范围内的无序排列的数字,可以把其作为选择图片子集的索引,用于创建validation数据集。

可以创建验证代码,如下所示:

上述代码创建了validation文件夹,并在train和valid目录里创建了对应的类别文件夹(cats和dogs)。

可以用下面的代码对索引进行无序排列:

在上面的代码中,我们使用无序排列后的索引随机抽出2000张不同的图片作为验证集。同样地,我们把训练数据用到的图片划分到train目录。

现在已经得到了需要格式的数据,我们来快速看一下如何把图片加载成PyTorch张量。

PyTorch的torchvision.datasets包提供了一个名为ImageFolder的工具类,当数据以前面提到的格式呈现时,它可以用于加载图片以及相应的标签。通常需要进行下面的预处理步骤。

1.把所有图片转换成同等大小。大多数深度学习架构都期望图片具有相同的尺寸。

2.用数据集的均值和标准差把数据集归一化。

3.把图片数据集转换成PyTorch张量。

PyTorch在transforms模块中提供了很多工具函数,从而简化了这些预处理步骤。例如,进行如下3种变换:

· 调整成256 ×256大小的图片;

· 转换成PyTorch张量;

· 归一化数据(第5章将探讨如何获得均值和标准差)。

下面的代码演示了如何使用ImageFolder类进行变换和加载图片:

train对象为数据集保留了所有的图片和相应的标签。它包含两个重要属性:一个给出了类别和相应数据集索引的映射;另一个给出了类别列表。

把加载到张量中的数据可视化往往是一个最佳实践。为了可视化张量,必须对张量再次变形并将值反归一化。下面的函数实现了这样的功能:

现在,可以把张量传入前面的imshow函数,将张量转换成图片:

上述代码生成的输出如图3.8所示。

图3.8

在深度学习或机器学习中把图片进行批取样是一个通用实践,因为当今的图形处理器(GPU)和CPU都为批量图片的操作进行了优化。批尺寸根据我们使用的GPU种类而不同。每个GPU都有自己的内存,可能从2GB到12GB不等,有时商业GPU内存会更大。PyTorch提供了DataLoader类,它输入数据集将返回批图片。它抽象出了批处理的很多复杂度,如应用变换时的多worker的使用。下面的代码把前面的train和valid数据集转换到数据加载器(data loader)中:

DataLoader类提供了很多选项,其中最常使用的选项如下。

· shuffle:为true时,每次调用数据加载器时都混合排列图片。

· num_workers:负责并发。使用少于机器内核数量的worker是一个通用的实践。

对于大多的真实用例,特别是在计算机视觉中,我们很少构建自己的架构。可以使用已有的不同架构快速解决我们的真实问题。在我们的例子中,使用了流行的名为ResNet的深度学习算法,它在2015年赢得了不同竞赛的冠军,如与计算机视觉相关的ImageNet。为了更容易理解,我们假设算法是一些仔细连接在一起的不同的PyTorch层,并不关注算法的内部。在第5章学习卷积神经网络(CNN)时,我们将看到一些关键的ResNet算法的构造块。PyTorch通过torchvision.models模块提供的现成应用使得用户更容易使用这样的流行算法。因而,对于本例,我们快速看一下如何使用算法,然后再详解每行代码:

models.resnet18(pertrained = True)对象创建了算法的实例,实例是PyTorch层的集合。我们打印出model_ft,快速地看一看哪些东西构成了ResNet算法。算法的一小部分看起来如图3.9所示。这里没有包含整个算法,因为这很可能会占用几页内容。

图3.9

可以看出,ResNet架构是一个层的集合,包含的层为Conv2d、BatchNorm2d和 MaxPool2d,这些层以一种特有的方式组合在一起。所有这些算法都将接受一个名为pretrained的参数。当pretrained为True时,算法的权重已为特定的ImageNet分类问题微调好。ImageNet预测的类别有1000种,包括汽车、船、鱼、猫和狗等。训练该算法,使其预测1000种ImageNet类别,权重调整到某一点,让算法得到最高的准确率。我们为用例使用这些保存好并与模型共享的权重。与以随机权重开始的情况相比,算法以微调好的权重开始时会趋向于工作得更好。因而,我们的用例将从预训练好的权重开始。

ResNet算法不能直接使用,因为它是用来预测1,000种类别,而对于我们的用例,仅需预测猫和狗这两种类别。为此,我们拿到ResNet模型的最后一层——linear层,并把输出特征改成2,如下面的代码所示:

files = glob(os.path.join(path,'*/*.jpg')) no_of_images = len(files) shuffle = np.random.permutation(no_of_images) train = files[shuffle[:int(no_of_images*0.8)]] valid = files[shuffle[int(no_of_images*0.8):]]class Architecturel(nn.Module): def init (self, input_size, hidden_size, num_classes): super(Architecturel, self). init () self.fcl = nn.Linear(input_size, hidden_size) self.relu nn.ReLU() self.fc2 = nn.Linear(hidden_size, num_classes) self.relu = nn.ReLU() self.fc3 = nn.Linear(hidden_size, num_classes) def forward(self, x): out = self.fcl(x) out = self.relu(out) out = self.fc2(out) out = self.relu(out) out = self.fc3(out) return outclass Architecture2(nn.Module): def init (self, input_size, hidden_size, num_classes): super(Architecture2, self). init () self.fcl = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, num_classes) def forward(self, x): out = self.fcl(x) out = self.relu(out) out = self.fc2(out) return outmodel =Architecturel(l〇,2〇,2) optimizer = torch.optim.Adam(model.parameters(), lr=le-4, weight_decay=le-5)nn.dropout(x, training=True) scheduler = StepLR(optimizer, step_size=30, gamma=0.1) for epoch in range(100): scheduler.step() train(...) validate(...) scheduler = MultiStepLR(optimizer, milestones=[30,80], gamma=0.1) for epoch in range(100): scheduler.step() train(...) validate(...) optimizer = torch.optim.SGD(model.parameters(), lr=〇.l, momentum=0.9) scheduler = ReduceLR〇nPlateau(optimizer, 'min') for epoch in range(lO): train(...) val_loss = validate(...) # Note that step should be called after validate() scheduler.step(val_loss)

获取更多专业知识请关注公众号:“人工智能技术与咨询”

文章内容转自《PyTorch深度学习》,针对转载原作者有任何疑问,请第一时间联系我们,我们会进行调整或删除。

本文由作者上传并发布(或网友转载),绿林网仅提供信息发布平台。文章仅代表作者个人观点,未经作者许可,不可转载。
点击查看全文
相关推荐
热门推荐