pytorch + visdom CNN处理自建图片数据集的方法

这篇文章主要介绍了关于pytorch + visdom cnn处理自建图片数据集的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

环境

系统:win10

cpu:i7-6700HQ

gpu:gtx965m

python : 3.6

pytorch :0.3

数据下载

来源自Sasank Chilamkurthy 的教程; 数据:下载链接。

下载后解压放到项目根目录:

pytorch + visdom CNN处理自建图片数据集的方法 

数据集为用来分类 蚂蚁和蜜蜂。有大约120个训练图像,每个类有75个验证图像。

数据导入

可以使用 torchvision.datasets.ImageFolder(root,transforms) 模块 可以将 图片转换为 tensor。

先定义transform:

ata_transforms = {  'train': transforms.Compose([    # 随机切成224x224 大小图片 统一图片格式    transforms.RandomResizedCrop(224),    # 图像翻转    transforms.RandomHorizontalFlip(),    # totensor 归一化(0,255) >> (0,1)  normalize  channel=(channel-mean)/std    transforms.ToTensor(),    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  ]),  "val" : transforms.Compose([    # 图片大小缩放 统一图片格式    transforms.Resize(256),    # 以中心裁剪    transforms.CenterCrop(224),    transforms.ToTensor(),    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  ])}

登录后复制

导入,加载数据:

data_dir = './hymenoptera_data'# trans dataimage_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'val']}# load datadata_loaders = {x: DataLoader(image_datasets[x], batch_size=BATCH_SIZE, shuffle=True) for x in ['train', 'val']}data_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}class_names = image_datasets['train'].classesprint(data_sizes, class_names)

登录后复制

{'train': 244, 'val': 153} ['ants', 'bees']

登录后复制

训练集 244图片 , 测试集153图片 。

可视化部分图片看看,由于visdom支持tensor输入 ,不用换成numpy,直接用tensor计算即可 :

inputs, classes = next(iter(data_loaders['val']))out = torchvision.utils.make_grid(inputs)inp = torch.transpose(out, 0, 2)mean = torch.FloatTensor([0.485, 0.456, 0.406])std = torch.FloatTensor([0.229, 0.224, 0.225])inp = std * inp + meaninp = torch.transpose(inp, 0, 2)viz.images(inp)

登录后复制

pytorch + visdom CNN处理自建图片数据集的方法

创建CNN

net 根据上一篇的处理cifar10的改了一下规格:

class CNN(nn.Module):  def __init__(self, in_dim, n_class):    super(CNN, self).__init__()    self.cnn = nn.Sequential(      nn.BatchNorm2d(in_dim),      nn.ReLU(True),      nn.Conv2d(in_dim, 16, 7), # 224 >> 218      nn.BatchNorm2d(16),      nn.ReLU(inplace=True),      nn.MaxPool2d(2, 2), # 218 >> 109      nn.ReLU(True),      nn.Conv2d(16, 32, 5), # 105      nn.BatchNorm2d(32),      nn.ReLU(True),      nn.Conv2d(32, 64, 5), # 101      nn.BatchNorm2d(64),      nn.ReLU(True),      nn.Conv2d(64, 64, 3, 1, 1),      nn.BatchNorm2d(64),      nn.ReLU(True),      nn.MaxPool2d(2, 2), # 101 >> 50      nn.Conv2d(64, 128, 3, 1, 1), #      nn.BatchNorm2d(128),      nn.ReLU(True),      nn.MaxPool2d(3), # 50 >> 16    )    self.fc = nn.Sequential(      nn.Linear(128*16*16, 120),      nn.BatchNorm1d(120),      nn.ReLU(True),      nn.Linear(120, n_class))  def forward(self, x):    out = self.cnn(x)    out = self.fc(out.view(-1, 128*16*16))    return out# 输入3层rgb ,输出 分类 2    model = CNN(3, 2)

登录后复制

loss,优化函数:

line = viz.line(Y=np.arange(10))loss_f = nn.CrossEntropyLoss()optimizer = optim.SGD(model.parameters(), lr=LR, momentum=0.9)scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1)

登录后复制

参数:

BATCH_SIZE = 4LR = 0.001EPOCHS = 10

登录后复制

运行 10个 epoch 看看:

[9/10] train_loss:0.650|train_acc:0.639|test_loss:0.621|test_acc0.706[10/10] train_loss:0.645|train_acc:0.627|test_loss:0.654|test_acc0.686Training complete in 1m 16sBest val Acc: 0.712418

登录后复制

pytorch + visdom CNN处理自建图片数据集的方法

运行 20个看看:

[19/20] train_loss:0.592|train_acc:0.701|test_loss:0.563|test_acc0.712[20/20] train_loss:0.564|train_acc:0.721|test_loss:0.571|test_acc0.706Training complete in 2m 30sBest val Acc: 0.745098

登录后复制

pytorch + visdom CNN处理自建图片数据集的方法

准确率比较低:只有74.5%

我们使用models 里的 resnet18 运行 10个epoch:

model = torchvision.models.resnet18(True)num_ftrs = model.fc.in_featuresmodel.fc = nn.Linear(num_ftrs, 2)

登录后复制

[9/10] train_loss:0.621|train_acc:0.652|test_loss:0.588|test_acc0.667[10/10] train_loss:0.610|train_acc:0.680|test_loss:0.561|test_acc0.667Training complete in 1m 24sBest val Acc: 0.686275

登录后复制

效果也很一般,想要短时间内就训练出效果很好的models,我们可以下载训练好的state,在此基础上训练:

model = torchvision.models.resnet18(pretrained=True)num_ftrs = model.fc.in_featuresmodel.fc = nn.Linear(num_ftrs, 2)

登录后复制

[9/10] train_loss:0.308|train_acc:0.877|test_loss:0.160|test_acc0.941[10/10] train_loss:0.267|train_acc:0.885|test_loss:0.148|test_acc0.954Training complete in 1m 25sBest val Acc: 0.954248

登录后复制

10个epoch直接的到95%的准确率。

pytorch + visdom CNN处理自建图片数据集的方法

相关推荐:

pytorch + visdom 处理简单分类问题

以上就是pytorch + visdom CNN处理自建图片数据集的方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2262120.html

(0)
上一篇 2025年2月27日 06:43:18
下一篇 2025年2月27日 06:43:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 嘉宾副业说实36技第六技:零基础三十分钟精通副业道路上所有的图片制作

    嘉宾副业说实36技第六技:零基础三十分钟精通副业道路上所有的图片制作 我们在做副业项目网络创业的时候,我们做淘宝需要做封面,做b站需要做封面知乎也需要做封面连抖音也需要做封面,等等不管是项目还是平台,在这个视频里面分享到四个做这些图片和封面…

    2025年4月27日
    886.6K00
  • Linux下PyTorch安装的方法是什么

    一、PyTorch简介 pytorch是一个开源的python机器学习库,基于torch,用于自然语言处理等应用程序。2017年1月,由facebook人工智能研究院(fair)基于torch推出pytorch。pytorch的前身是tor…

    2025年3月30日 编程技术
    100
  • 如何使用HTML和CSS创建一个响应式图片网格布局

    如何使用HTML和CSS创建一个响应式图片网格布局 在当今的互联网时代,图片占据了网络内容的重要一部分。为了展示各种类型的图片,我们需要一个有效且美观的网格布局。在本文中,我们将学习如何使用HTML和CSS创建一个响应式的图片网格布局。 首…

    2025年3月9日 编程技术
    300
  • 如何使用HTML和CSS创建一个响应式图片格子布局

    如何使用HTML和CSS创建一个响应式图片格子布局 在当前移动设备日益普及的时代,为了更好地展示图片内容和适应不同的屏幕尺寸,响应式设计变得越来越重要。在本文中,将介绍如何使用HTML和CSS创建一个响应式的图片格子布局,以展示图片并使其在…

    2025年3月9日 编程技术
    500
  • 微信小程序实现图片裁剪功能

    微信小程序实现图片裁剪功能 随着微信小程序的快速发展,越来越多的开发者开始探索小程序的潜力。其中,图片处理功能是小程序中常见的需求之一。本文将介绍如何在微信小程序中实现图片裁剪功能,并提供具体的代码示例,帮助开发者快速实现这一功能。 准备工…

    2025年3月9日
    400
  • 实现微信小程序中的图片滤镜效果

    实现微信小程序中的图片滤镜效果 随着社交媒体应用的流行,人们越来越喜欢在照片中应用滤镜效果,以增强照片的艺术效果和吸引力。在微信小程序中也可以实现图片滤镜效果,为用户提供更多有趣和创造性的照片编辑功能。本文将介绍如何在微信小程序中实现图片滤…

    2025年3月9日
    300
  • 使用微信小程序实现图片拖拽功能

    使用微信小程序实现图片拖拽功能 引言:随着微信小程序的流行,更多的开发者开始探索小程序的各种功能和特性。其中,实现图片拖拽功能是一项常见的需求。本文将介绍如何使用微信小程序的API和组件,实现图片拖拽的效果,并提供具体的代码示例。 一、设计…

    2025年3月9日
    300
  • uploader秒传图片到服务器

    本文主要为大家详细介绍了uploader秒传图片到服务器的完整代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 先看看效果图: 页面中js部分 var f1 = null; var picarr = new Arr…

    2025年3月8日 编程技术
    500
  • JS实现图片放大镜插件实例详解

    本文主要为大家详细介绍了js实现图片放大镜插件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 前  言   我们大家经常逛各种电商类的网站,商品的细节就需要用到放大镜,这个大家一定不陌生,今天我们就做一个图…

    2025年3月8日
    300
  • node实现文字生成图片代码分享

    本文主要介绍了node文字转图片的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 今天老板提了需求,要在服务端生成邀请卡,嗯…,简单的说就是把要这张: 变成差多这样的: 后端搞rub…

    2025年3月8日
    300

发表回复

登录后才能评论