在PyTorch中,一般常用的图片类型就两种,分别是RGB彩色图片或者灰度图。以前我都是用OpenCV进行判断的,但是实际上不论是PyTorch还是TensorFlow都已经融合了图像相关的操作,再加载OpenCV实在是多此一举。本文就是直接使用PyTorch代码进行图片的灰度判断,并且输出结果,结果为“是灰度图片”或者“不是灰度图片”。
在PyTorch中,transforms.ToTensor()是一个用于将PIL图像或NumPy数组转换为PyTorch张量的变换操作。本文主要介绍了transforms.ToTensor()的三个功能,最后通过两个代码示例进行演示。
state_dict就是一个简单的Python字典,它将模型中的可训练参数(比如weights和biases,batchnorm的running_mean、torch.optim参数等)通过将模型每层与层的参数张量之间一一映射,实现保存、更新、变化和再存储。本文介绍了PyTorch里的各种保存方式,包括参数保存及恢复、保存最优参数、完整保存、跨设备保存。根据实际情况选择合适的保存方式即可。
其实使用ResNet进行迁移学习的训练和使用VGG没有本质上大的区别。但是需要注意的是使用ResNet的时候,对最后一层分类器进行修改不是直接修改输出的类别数量,而是新建一个层。为了更加清晰,这里就不展示所有的代码了,而是展示网络模型的构建和修改的代码。
在训练过程中,学习速率过大会导致准确率上不去甚至发生震荡,学习速率过小,则有可能导致耗时非常久。为了取得一个平衡,可以尝试在训练的一开始以较大的学习速率,随着epoch的增长,逐渐缩小学习速率。那么,在PyTorch中,如何进行这样一个过程的代码编写呢?其实在PyTorch里,内置了一些学习速率衰减的方法策略。
数据增强在文章『一次说全TensorFlow中常用的数据增强方法:随机裁剪、上下左右翻转、亮度、对比度』里介绍过,简单理解就是通过人为的一些变化进行数据的改变,产生一些新的数据。常见用的数据增强方法就是那么几种,例如随机翻转、随机裁剪、对比度、亮度等的调整。本文就是简单说说在PyTorch里如何进行数据增强。
在TensorFlow的文章中,也是使用VGG网络进行迁移学习演示的。现在在PyTorch中,依旧使用内置的VGG模型进行迁移学习的演示。数据集是前面『PyTorch四种天气分类数据集下载及代码(Dropout、BatchNorm)』里的四种天气图片,所以本文就不再提供数据集的下载。其实在迁移学习中,唯一的不同就是网络模型。注意使用参数pretrained=True获得基于ImageNet的...
用到的数据集是四类天气图片(分别为cloudy、 rain、 shine、 sunrise),提供了数据集,当然这个不是直接进来读取的,需要用代码进行划分训练集以及测试集(具体见文『Python代码将图片自动分成训练train文件夹、测试test文件夹,子目录是具体类别』)。为了抑制过拟合,添加了BatchNorm层以及Dropout层。需要注意的是,只有在训练集的里面需要用到,因此在训练的...
在PyTorch中,卷积层函数Conv2d是一个最常见的一个函数了,但是对于里面的参数理解却让人迷糊。因为in_channels和out_channels都是channel,但是意思却不一样。本文主要写写对于这个参数的进一步理解。
在前面文章『pytorch基于MNIST数据集多分类问题完整代码示例(全连接网络)』中,使用的是全连接层网络进行识别,但是在图像识别上一般不适用全连接层,因为如果是比较大的图像,会导致训练的参数量过于庞大。所以一般选择CNN方法,卷积神经网络的工作原理在文章『了解卷积神经网络CNN的基本原理』进行了大致的描述。本文的主要是使用pytorch框架写的CNN识别手写数字数据集,和全连接的代码相比...
在二分类问题(逻辑回归)时,使用sigmoid函数返回一个0~1的概率。在多分类问题的时候,则需要使用softmax函数来进行分类。在pytorch 里,对于多分类问题我们使用nn.CrossEntropyLoss()和nn.NLLLoss等来计算softmax交叉嫡。在本文的示例代码中使用MNIST数据集,进行一个完整的PyTorch训练示例。