当前位置: 首页 > news >正文

wordpress站内搜索插件河北网站seo地址

wordpress站内搜索插件,河北网站seo地址,梅州做网站需要多少钱,母婴类网站怎么建设目录 准备工作 整理数据集 将验证集从原始的训练集中拆分出来 整理测试集 使用函数 图像增广 读取数据集 定义模型 定义训练函数 训练和验证数据集 对测试集进行分类并提交结果 准备工作 首先导入竞赛需要的包和模块 import collections import math import os i…

目录

准备工作

整理数据集

将验证集从原始的训练集中拆分出来

整理测试集

使用函数

图像增广

读取数据集

定义模型

定义训练函数

训练和验证数据集

对测试集进行分类并提交结果


准备工作

首先导入竞赛需要的包和模块 

import collections
import math
import os
import shutil    # python用来操作文件很方便的一个包
import pandas as pd
import torch
import torchvision
from torch import nn
from d2l import torch as d2l

使用d2l里面的一个小规模样本来代替完整的 CIFAR-10 数据集,包含前1000个训练图像和5个随机测试图像的数据集的小规模样本

d2l.DATA_HUB['cifar10_tiny'] = (d2l.DATA_URL + 'kaggle_cifar10_tiny.zip','2068874e4b9a9f0fb07ebe0ad2b29754449ccacd')# 如果使用完整的Kaggle竞赛的数据集,设置demo为False
demo = Trueif demo:data_dir = d2l.download_extract('cifar10_tiny')
else:data_dir = '../data/cifar-10/'

整理数据集

我们需要整理数据集来训练和测试模型。

首先,我们用以下函数读取CSV文件中的标签,它返回一个字典,该字典将文件名中不带扩展名的部分映射到其标签。

def read_csv_labels(fname):"""读取fname来给标签字典返回一个文件名"""with open(fname, 'r') as f:# 跳过文件头行(列名)lines = f.readlines()[1:]tokens = [l.rstrip().split(',') for l in lines]return dict(((name, label) for name, label in tokens))labels = read_csv_labels(os.path.join(data_dir, 'trainLabels.csv'))
print('# 训练样本 :', len(labels))
print('# 类别 :', len(set(labels.values())))# 训练样本 : 1000
# 类别 : 10

将验证集从原始的训练集中拆分出来

我们定义 reorg_train_valid 函数来将验证集从原始的训练集中拆分出来。

此函数中的参数 valid_ratio 是验证集中的样本数与原始训练集中的样本数之比。 更具体地说,令 n 等于样本最少的类别中的图像数量,而 r 是比率。验证集将为每个类别拆分出 max(⌊nr⌋,1) 张图像。

让我们以valid_ratio=0.1为例,由于原始的训练集有50000张图像,因此 train_valid_test/train 路径中将有45000张图像用于训练,而剩下5000张图像将作为路径 train_valid_test/valid 中的验证集。组织数据集后,同类别的图像将被放置在同一文件夹下。

def copyfile(filename, target_dir):"""将文件复制到目标目录"""os.makedirs(target_dir, exist_ok=True)shutil.copy(filename, target_dir)def reorg_train_valid(data_dir, labels, valid_ratio):"""将验证集从原始的训练集中拆分出来"""# 训练数据集中样本最少的类别中的样本数n = collections.Counter(labels.values()).most_common()[-1][1]# 验证集中每个类别的样本数n_valid_per_label = max(1, math.floor(n * valid_ratio))label_count = {}for train_file in os.listdir(os.path.join(data_dir, 'train')):label = labels[train_file.split('.')[0]]fname = os.path.join(data_dir, 'train', train_file)copyfile(fname, os.path.join(data_dir, 'train_valid_test','train_valid', label))if label not in label_count or label_count[label] < n_valid_per_label:copyfile(fname, os.path.join(data_dir, 'train_valid_test','valid', label))label_count[label] = label_count.get(label, 0) + 1else:copyfile(fname, os.path.join(data_dir, 'train_valid_test','train', label))return n_valid_per_label

整理测试集

下面的reorg_test函数用来在预测期间整理测试集,以方便读取。

def reorg_test(data_dir):"""在预测期间整理测试集,以方便读取"""for test_file in os.listdir(os.path.join(data_dir, 'test')):copyfile(os.path.join(data_dir, 'test', test_file),os.path.join(data_dir, 'train_valid_test', 'test','unknown'))

使用函数

最后,我们使用一个函数来调用前面定义的函数read_csv_labelsreorg_train_validreorg_test

在这里,我们只将样本数据集的批量大小设置为32。 在实际训练和测试中,应该使用Kaggle竞赛的完整数据集,并将 batch_size设置为更大的整数,例如128。 我们将10%的训练样本作为调整超参数的验证集。

def reorg_cifar10_data(data_dir, valid_ratio):labels = read_csv_labels(os.path.join(data_dir, 'trainLabels.csv'))reorg_train_valid(data_dir, labels, valid_ratio)reorg_test(data_dir)batch_size = 32 if demo else 128
valid_ratio = 0.1
reorg_cifar10_data(data_dir, valid_ratio)

图像增广

使用图像增广来解决过拟合的问题。

例如在训练中,可以随机水平翻转图像;还可以对彩色图像的三个RGB通道执行标准化。 下面,列出了其中一些可以调整的操作。

transform_train = torchvision.transforms.Compose([# 在高度和宽度上将图像放大到40像素的正方形torchvision.transforms.Resize(40),# 随机裁剪出一个高度和宽度均为40像素的正方形图像,# 生成一个面积为原始图像面积0.64~1倍的小正方形,# 然后将其缩放为高度和宽度均为32像素的正方形torchvision.transforms.RandomResizedCrop(32, scale=(0.64, 1.0),ratio=(1.0, 1.0)),torchvision.transforms.RandomHorizontalFlip(),torchvision.transforms.ToTensor(),# 标准化图像的每个通道torchvision.transforms.Normalize([0.4914, 0.4822, 0.4465],[0.2023, 0.1994, 0.2010])])

在测试期间,我们只对图像执行标准化,以消除评估结果中的随机性。

transform_test = torchvision.transforms.Compose([torchvision.transforms.ToTensor(),torchvision.transforms.Normalize([0.4914, 0.4822, 0.4465],[0.2023, 0.1994, 0.2010])])

读取数据集

每个样本都包括一张图片和一个标签。

在训练期间,我们需要指定上面定义的所有图像增广操作。当验证集在超参数调整过程中用于模型评估时,不应引入图像增广的随机性。在最终预测之前,我们根据训练集和验证集组合而成的训练模型进行训练,以充分利用所有标记的数据。

train_ds, train_valid_ds = [torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train_valid_test', folder),transform=transform_train) for folder in ['train', 'train_valid']]valid_ds, test_ds = [torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train_valid_test', folder),transform=transform_test) for folder in ['valid', 'test']]

指定上面定义的所有图像增广操作 

train_iter, train_valid_iter = [torch.utils.data.DataLoader(# shuffle要开随机梯度下降,drop_last:如果最后一组不满batch_size,true会丢掉最后一节dataset, batch_size, shuffle=True, drop_last=True)for dataset in (train_ds, train_valid_ds)]valid_iter = torch.utils.data.DataLoader(valid_ds, batch_size, shuffle=False,drop_last=True)test_iter = torch.utils.data.DataLoader(test_ds, batch_size, shuffle=False,drop_last=False)    # 但是test的不能丢

定义模型

模型直接用了一个ResNet-18

def get_net():num_classes = 10net = d2l.resnet18(num_classes, 3)return netloss = nn.CrossEntropyLoss(reduction="none")

定义训练函数

# lr_period,lr_decay:学习率下降的一种方法
# lr_period:每隔多少了epoch
# lr_decay:下降多少(0.5:减半)
def train(net, train_iter, valid_iter, num_epochs, lr, wd, devices, lr_period,lr_decay):trainer = torch.optim.SGD(net.parameters(), lr=lr, momentum=0.9,weight_decay=wd)# 调整lr 把decay值*lrscheduler = torch.optim.lr_scheduler.StepLR(trainer, lr_period, lr_decay)num_batches, timer = len(train_iter), d2l.Timer()legend = ['train loss', 'train acc']if valid_iter is not None:legend.append('valid acc')animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs],legend=legend)# 多GPU训练net = nn.DataParallel(net, device_ids=devices).to(devices[0])for epoch in range(num_epochs):net.train()metric = d2l.Accumulator(3)# 为了展示 画图用的 正常训练不需要for i, (features, labels) in enumerate(train_iter):timer.start()l, acc = d2l.train_batch_ch13(net, features, labels,loss, trainer, devices)metric.add(l, acc, labels.shape[0])timer.stop()if (i + 1) % (num_batches // 5) == 0 or i == num_batches - 1:animator.add(epoch + (i + 1) / num_batches,(metric[0] / metric[2], metric[1] / metric[2],None))if valid_iter is not None:valid_acc = d2l.evaluate_accuracy_gpu(net, valid_iter)animator.add(epoch + 1, (None, None, valid_acc))# 每个epoch之后更新一下lrscheduler.step()measures = (f'train loss {metric[0] / metric[2]:.3f}, 'f'train acc {metric[1] / metric[2]:.3f}')if valid_iter is not None:measures += f', valid acc {valid_acc:.3f}'print(measures + f'\n{metric[2] * num_epochs / timer.sum():.1f}'f' examples/sec on {str(devices)}')

训练和验证数据集

devices, num_epochs, lr, wd = d2l.try_all_gpus(), 20, 2e-4, 5e-4
lr_period, lr_decay, net = 4, 0.9, get_net()
train(net, train_iter, valid_iter, num_epochs, lr, wd, devices, lr_period,lr_decay)

对测试集进行分类并提交结果

在获得具有超参数的满意的模型后,我们使用所有标记的数据(包括验证集)来重新训练模型并对测试集进行分类。

net, preds = get_net(), []
# 使用完整的数据集训练模型
train(net, train_valid_iter, None, num_epochs, lr, wd, devices, lr_period,lr_decay)for X, _ in test_iter:y_hat = net(X.to(devices[0]))# 占比最大的值取出来preds.extend(y_hat.argmax(dim=1).type(torch.int32).cpu().numpy())
sorted_ids = list(range(1, len(test_ds) + 1))
sorted_ids.sort(key=lambda x: str(x))
df = pd.DataFrame({'id': sorted_ids, 'label': preds})
df['label'] = df['label'].apply(lambda x: train_valid_ds.classes[x])
# 存成一个csv
df.to_csv('submission.csv', index=False)

文章转载自:
http://dinncochicalote.bpmz.cn
http://dinncoresounding.bpmz.cn
http://dinnconagana.bpmz.cn
http://dinncocroker.bpmz.cn
http://dinncojazzetry.bpmz.cn
http://dinncogorse.bpmz.cn
http://dinnconsf.bpmz.cn
http://dinncohalloa.bpmz.cn
http://dinncohydraulician.bpmz.cn
http://dinncohammy.bpmz.cn
http://dinncoprewriting.bpmz.cn
http://dinncotatty.bpmz.cn
http://dinnconourice.bpmz.cn
http://dinncoderaign.bpmz.cn
http://dinncosericiculture.bpmz.cn
http://dinncocheesemaker.bpmz.cn
http://dinncovituperation.bpmz.cn
http://dinncoflaccidity.bpmz.cn
http://dinncotowie.bpmz.cn
http://dinncozaguan.bpmz.cn
http://dinncohandline.bpmz.cn
http://dinncolauncher.bpmz.cn
http://dinncoexcellent.bpmz.cn
http://dinncobedsock.bpmz.cn
http://dinncotrochili.bpmz.cn
http://dinncotetramethyllead.bpmz.cn
http://dinncochemosterilant.bpmz.cn
http://dinncovesicular.bpmz.cn
http://dinncoartificial.bpmz.cn
http://dinncofungal.bpmz.cn
http://dinncousurer.bpmz.cn
http://dinnconicotinism.bpmz.cn
http://dinncopraedial.bpmz.cn
http://dinncoearning.bpmz.cn
http://dinncospintherism.bpmz.cn
http://dinncotrayful.bpmz.cn
http://dinncodestruction.bpmz.cn
http://dinncoepicalyx.bpmz.cn
http://dinncodeception.bpmz.cn
http://dinncomahometan.bpmz.cn
http://dinncoedifier.bpmz.cn
http://dinncounwinking.bpmz.cn
http://dinncochemosmotic.bpmz.cn
http://dinncowindbreak.bpmz.cn
http://dinncotalking.bpmz.cn
http://dinncointrigant.bpmz.cn
http://dinncoslentando.bpmz.cn
http://dinncotypeface.bpmz.cn
http://dinncooverreliance.bpmz.cn
http://dinncotiddlywinks.bpmz.cn
http://dinncotelekineticist.bpmz.cn
http://dinncolimburger.bpmz.cn
http://dinncogwadar.bpmz.cn
http://dinncoergogram.bpmz.cn
http://dinncoimparity.bpmz.cn
http://dinncocrissal.bpmz.cn
http://dinncogrebe.bpmz.cn
http://dinncourdu.bpmz.cn
http://dinncoheadmaster.bpmz.cn
http://dinncoemptying.bpmz.cn
http://dinncodolosse.bpmz.cn
http://dinncotora.bpmz.cn
http://dinncohoedown.bpmz.cn
http://dinncoinappellable.bpmz.cn
http://dinnconeurotransmission.bpmz.cn
http://dinncossa.bpmz.cn
http://dinncohectogram.bpmz.cn
http://dinncomousey.bpmz.cn
http://dinncogooseneck.bpmz.cn
http://dinncobunned.bpmz.cn
http://dinncofeelthy.bpmz.cn
http://dinncoshf.bpmz.cn
http://dinncoproclamation.bpmz.cn
http://dinncooftimes.bpmz.cn
http://dinncosnowman.bpmz.cn
http://dinncopennyroyal.bpmz.cn
http://dinncoscorch.bpmz.cn
http://dinncoshuffle.bpmz.cn
http://dinncohoer.bpmz.cn
http://dinncoowing.bpmz.cn
http://dinncocoper.bpmz.cn
http://dinncoanterolateral.bpmz.cn
http://dinncopenniless.bpmz.cn
http://dinncogirder.bpmz.cn
http://dinncofearfulness.bpmz.cn
http://dinncoprecipe.bpmz.cn
http://dinncowaterweed.bpmz.cn
http://dinncoreverberant.bpmz.cn
http://dinncodenitrator.bpmz.cn
http://dinncodenticle.bpmz.cn
http://dinncoetceteras.bpmz.cn
http://dinncopashalic.bpmz.cn
http://dinnconeurosyphilis.bpmz.cn
http://dinncogoldenrod.bpmz.cn
http://dinncophiloctetes.bpmz.cn
http://dinncomete.bpmz.cn
http://dinncoebu.bpmz.cn
http://dinncofireless.bpmz.cn
http://dinncoexcerption.bpmz.cn
http://dinncoreclinate.bpmz.cn
http://www.dinnco.com/news/146706.html

相关文章:

  • 安徽网站制作公司企业管理咨询
  • 常用网站开发技术平台运营推广
  • 云服务器做网站好吗优化疫情防控 这些措施你应该知道
  • 网站做cdn免费网站申请注册
  • 江西宜春市建设局网站如何自己建个网站
  • 华为官方网站专卖店促销活动推广语言
  • 博客网站做啥好手机百度旧版本下载
  • 男男做视频网站新闻最新消息今天
  • 如何做返利网站哪个公司的网站制作
  • 惠州做网站优化大师官方正版下载
  • 手机可以看的网站推广普通话文字素材
  • 印刷报价网站源码下载制作网站大概多少钱
  • 网站设计日志店铺运营方案策划
  • 如何开 网站建设公司企业网络推广的方式有哪些
  • 网站名称跟域名哪有网页设计公司
  • 进入京东商城站长工具的使用seo综合查询运营
  • 每日新闻最新消息宁波免费seo排名优化
  • 兰州做网站多少钱网站自然优化
  • 麦积区城乡建设局网站信息流优化师培训机构
  • 网站怎么做代码优化品牌型网站制作价格
  • 白云区江夏附近做网站seo入门培训教程
  • 网站提交网址教育机构退费纠纷找谁
  • 没有网站的域名郑州今日头条
  • 常见的分类信息网站有哪些如何推销产品给客户
  • 电子商务网站建设策划书例子苏州关键词排名提升
  • 网站做推广的方式邢台网站公司
  • 漳浦建设银行网站网络媒体发稿
  • 网站图片轮播怎么做精品成品网站源码
  • .net 网站制作建站流程主要有哪些
  • ppt模板哪里找太原关键词优化报价