惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
Lohrmann on Cybersecurity
S
Secure Thoughts
I
Intezer
Forbes - Security
Forbes - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
H
Help Net Security
IT之家
IT之家
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
宝玉的分享
宝玉的分享
S
Securelist
T
The Exploit Database - CXSecurity.com
博客园 - 叶小钗
Security Latest
Security Latest
The Cloudflare Blog
Jina AI
Jina AI
T
Tenable Blog
J
Java Code Geeks
G
GRAHAM CLULEY
C
CERT Recently Published Vulnerability Notes
SecWiki News
SecWiki News
AI
AI
博客园 - 聂微东
S
Schneier on Security
博客园_首页
爱范儿
爱范儿
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 【当耐特】
T
Threatpost
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Recent Announcements
Recent Announcements
W
WeLiveSecurity
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
S
Security Affairs
T
Tor Project blog
T
Tailwind CSS Blog
N
News | PayPal Newsroom
C
CXSECURITY Database RSS Feed - CXSecurity.com
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
The Register - Security
The Register - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security

gyro永不抽风!

深入理解 Zyzzyva 协议 - gyro永不抽风! 深入理解 PBFT 协议 - gyro永不抽风! 西瓜书 绪论 习题 - gyro永不抽风! 读论文——YOLO v1 - gyro永不抽风! P1363 幻象迷宫 - DFS - gyro永不抽风! P3572 [POI2014] PTA-Little Bird - DP 单调队列 POJ 2823 滑动窗口 单调队列 - 致逝去的青春 leetcode 1787 使所有区间的异或结果为零 - DP - 随机跳题计划 P2210 Haywire - 状压 DP VSCode绕开腾讯云COS防盗链 | Markdown魔改过程 - gyro永不抽风! GAN(对抗生成网络)的基本原理以及数学证明 - gyro永不抽风! Canny边缘检测算法(基于OpenCV的Java实现) - gyro永不抽风!
PyTorch Data Augmentation 数据增广 - gyro永不抽风!
博主: gyro永不抽风 · 2022-05-02 · via gyro永不抽风!

Data Augmentation

这个词其实很容易误导人,因为 Augmentation 是增广的意思。数据增广,自然而然就会让人理解为:“增加了新的数据”。然而在实现的过程中,不一定是这样。

我们会给定一些随机化的参数,在每个 epoch 内生成随机增广后的图片。

比方说,每个 epoch 都按照一定的 random rule 来 crop 图片、调整色调,便是图像增广。

PyTorch 实现

这里拿 Fashion-MNIST 举例,同样我们会给出例子来证明我们的做法是行之有效的。

首先引入包:

%matplotlib inline
%config InlineBackend.figure_formats = ['svg']
from matplotlib import pyplot as plt
import torch
import torchvision
from torch.utils import data

加载 FashionMNIST 数据集,并且禁用 shuffle,这样保证我们每个 epoch 图片顺序都是相同的,方便我们验证:

def load_data_fashion_mnist(batch_size, dataloader_worker_count, resize=None):
    trans = [torchvision.transforms.ToTensor()]
    if resize:
        trans.insert(0, torchvision.transforms.Resize(resize))
    trans.append(torchvision.transforms.RandomCrop((28, 28)))
    trans = torchvision.transforms.Compose(trans)
    mnist_train = torchvision.datasets.FashionMNIST(
        root="../data", train=True, transform=trans, download=True)
    mnist_test = torchvision.datasets.FashionMNIST(
        root="../data", train=False, transform=trans, download=True)
    return (data.DataLoader(mnist_train, batch_size, shuffle=False, num_workers=dataloader_worker_count),
            data.DataLoader(mnist_test, batch_size, shuffle=False, num_workers=dataloader_worker_count))

辅助渲染的函数:

def get_fashion_mnist_labels(labels):
    '''
    返回Fashion-MNIST数据集的文本标签
    '''
    text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
    return [text_labels[int(i)] for i in labels]

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.2):
    '''
    绘制图像列表
    '''
    figsize = (num_cols * scale, num_rows * scale)
    _, axes = plt.subplots(num_rows, num_cols, figsize=figsize)
    axes = axes.flatten()
    for i, (ax, img) in enumerate(zip(axes, imgs)):
        if torch.is_tensor(img):
            # 图片张量
            ax.imshow(img.numpy())
        else:
            # PIL图片
            ax.imshow(img)
        ax.axes.get_xaxis().set_visible(False)
        ax.axes.get_yaxis().set_visible(False)
        if titles:
            ax.set_title(titles[i])
    return axes

测试三个 epoch,看每次 epoch 第一个 batch 的数据:

train_iter, test_iter = load_data_fashion_mnist(18, 4, resize=40)

for _ in range(3):
    for i, (X, y) in enumerate(train_iter):
        if i == 0:
            show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))

输出:

可以看出有明显的不同。

本文中的 notebook:https://github.com/JeffersonQin/deep-learning/blob/master/tests/pytorch-data-augmentation.ipynb

赞赏作者