用Pytorch进行图像分类

用Pytorch进行图像分类

(对一张猫和一张鱼的图片进行区分)

传统挑战

1、首先需要数据

要想有效地使用深度学习技术,需要较大量的数据来训练神经网络,让神经网络学习并记忆他们的特征。所以我们需要很多鱼和猫的图片
**监督学习和无监督学习的区别

  • 有监督学习必须要有训练集和测试样本。在训练集中找规律,而对测试样本使用这种规律。非监督学习没有训练集,只有一组数据,在该数据集中寻找规律
  • 有监督学习的方法就是识别事物,识别的结果表现在给识别数据加上了标签。因此训练样本集必须由带标签的样本组成。而非监督学习方法只有要分析的数据集本身,预先没有什么标签。如果发现数据集呈现某种聚集性,则可按自然的聚集性分类,但不予以某种预先分类标签对上号为目的
  • 非监督学习的方法在寻找数据集中的规律性,这种规律性并不一定要达到划分数据集的目的,也就是说不一定要”分类“。这一点是比有监督学习的用途要广。例如分析一堆数据的主分量,或分析数据集有什么特点都可以归于非监督学习的范畴

2、PyTorch和数据加载器

# 能与Pytorch进行数据交互的抽象类
class Dataset(object):
    #将数据转换成张量并返回张量和标签
    def __getitem__(self,index):
        pass
    def __len__(self):
        pass

__len__方法用于返回数据集的大小
__getitem__方法用于接收一个图像,将它转换为一个张量,再返回这个张量和标签,以便PyTorch进行处理

3、建立一个训练数据集

import torchvision
from torchvision import transforms#进行训练数据的转换
#要求我们的图像都在一个适当的目录结构中,其中每个目录分别是一个标签
train_data_path="./train/"
#设置转换的各项参数
transforms=transforms.Compose([transforms.Resize(64),#将每个图片都缩放为相同的分辨率64x64,便于GPU的处理
                               transforms.ToTensor(),#将数据集转化为张量
                               transforms.Normalize(mean=[0.485,0.456,0.406],
                                                    std=[0.229,0.224,0.225])#设置用于归一化的参数
                               ])
#处理训练数据集
train_data=torchvision.datasets.ImageFolder(root=train_data_path,transform=transforms)

4、建立验证和测试数据集

深度学习面临一个危险是过拟合(overfitting)概念:你的模型确实能很好地识别所训练的数据,不过不能泛化到它没有见过的例子。为了解决这个问题,可以下载一个验证集,这是未出现在训练集中的一系列猫和鱼的图像。在每个训练周期(也称为epoch)的最后,我们会与这个验证集进行比较,来确保我们的的网络没有做错。

val_data_path="./val/"
# 直接使用了前面的设置
val_data=torchvision.datasets.ImageFolder(root=val_data_path,transform=transforms)

#除了验证集,还需要创建一个测试集(test set),这个数据集要在所有训练完成之后用来测试模型
test_data_path="./test/"
test.data=torchvision.datasets.ImageFolder(root=test_data_path,transform=transforms)

三种数据集:

  • 训练集:在训练过程中用来更新模型
  • 验证集:用来评价模型在这个问题领域的泛化能力,而不是与训练数据的拟合程度,不用来直接更新模型
  • 测试集:最后一个数据集,训练完成后对模型的性能提供最后的评价
    然后就可以建立我们的数据加载器:
#batch_size的值表示在训练和更新网络之前将为这个网络提供多少图像
batch_size=64
train_data_loader=data.DataLoader(train_data,batch_size=batch_size)
val_data_loader=data.DataLoader(val_data,batch_size=batch_size)
test_data_loader=data.DataLoader(test_data,batch_size=batch_size)

建立一个神经网络

激活函数

max(0,x) 输入为x

创建一个网络

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值