成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

pytorch深度學(xué)習(xí)實(shí)戰(zhàn)lesson33-創(chuàng)新互聯(lián)

第三十三課 數(shù)據(jù)增廣

公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出撫順免費(fèi)做網(wǎng)站回饋大家。

數(shù)據(jù)增廣的不僅僅是處理圖片,還可以處理文本或語音。我們在這里其實(shí)主要專注的是圖片上的一些技術(shù)??梢钥吹竭@幾張圖是說是對一個松鼠做不同的一些處理,比如說可以把一些像素拿掉、把它的顏色做變換,然后最后面一個是對它的亮度做很多變換。

目錄

理論部分

實(shí)踐部分


理論部分

Ces上的真實(shí)故事是講在采集數(shù)據(jù)訓(xùn)練模型的時候,現(xiàn)場的場景至關(guān)重要,在實(shí)際部署的時候要充足的對現(xiàn)場的場景進(jìn)行數(shù)據(jù)采集。特別是對于比如說手機(jī)上的應(yīng)用各種攝像頭那一塊的應(yīng)用確實(shí)是非常不一樣。比如語音識別,在室內(nèi)識別和室外識別它整個背景噪音是不一樣的,而且聲音的反射也不一樣。攝像頭也是一樣的,不同手機(jī)拍的東西,攝像頭的質(zhì)量不一樣顏色不一樣場景不一樣,都會給你導(dǎo)致問題。所以就是說訓(xùn)練集應(yīng)能夠盡可能的去模擬在部署的時候可以碰到的各種場景,是模型的泛化性的一個非常重要的部分。

所以數(shù)據(jù)增強(qiáng)是干嘛的呢?數(shù)據(jù)增強(qiáng)的意思是在一個已有的數(shù)據(jù)集上面,通過數(shù)據(jù)變換,使得它有多樣性。比如說語音的數(shù)據(jù)的話,那么可以在語音里面加入不同的背景噪音。如果是圖片數(shù)據(jù)的話,那么可以去改變圖片的形狀顏色。比如說這里的話上圖所示是原始的一張貓的圖片,這是這個數(shù)據(jù)集里面的。那我可以把整個圖片摳出一塊來,就是說理想情況下可能整個貓都拍過來了,但是在實(shí)際中我可能只拍到一個貓的一半,那么當(dāng)我看到它的時候,我應(yīng)該也能去識別出這是一只貓。第二個就是說我可以對這個圖片的亮度進(jìn)行變化,有可能是比較暗,有可能是比較亮。第三個是說我可以對它的色溫進(jìn)行變化,可以是藍(lán)一點(diǎn)黃紅一點(diǎn)。

一般來說數(shù)據(jù)增強(qiáng)是在線生成的,而不是說給我一個數(shù)據(jù)集,然后生成好圖片再存下來。一般的做法是說跟以前一樣去從原始數(shù)據(jù)讀圖片過來之后,對圖片隨機(jī)的做增強(qiáng)。就是說我從數(shù)據(jù)集讀出來之后,然后將一些不同的增強(qiáng)的方法隨機(jī)的應(yīng)用在個圖片上就可以生成,可能是生出來一堆不一樣的圖片,然后對它再進(jìn)入模型進(jìn)行訓(xùn)練。所以核心是說每一次是在線的生成,而且是隨機(jī)的,測試的時候一般是不會去進(jìn)行突變增強(qiáng)的。

下圖所示的方法是一些數(shù)據(jù)增強(qiáng)的常用方法:

上下翻轉(zhuǎn)并總不是可行的,比如房子進(jìn)行上下翻轉(zhuǎn)后會有些奇怪了。但是樹葉進(jìn)行上下翻轉(zhuǎn)后就沒什么問題。

image aug里面提供了幾十種不一樣的做圖片增強(qiáng)的方法??梢钥吹奖热缯f去高斯模糊、銳化之類的方法?;旧峡梢哉J(rèn)為photoshop 能夠干的事情,都可以把它作用在圖片上面。但實(shí)際上來說作用好不好就不知道了,這與測試集與部署的環(huán)境的關(guān)系有關(guān)。

實(shí)踐部分

代碼:

#圖像增廣
import torch
import torchvision
from torch import nn
from d2l import torch as d2l
import matplotlib.pyplot as plt
d2l.set_figsize()
img = d2l.Image.open('D:\shi.jpg')
d2l.plt.imshow(img)
plt.show()
def apply(img, aug, num_rows=2, num_cols=4, scale=1.5):#2行4列表示一共要對圖片作用八次,1.5表示生成的圖片的大小
    Y = [aug(img) for _ in range(num_rows * num_cols)]#把所有的圖片存在Y中
    d2l.show_images(Y, num_rows, num_cols, scale=scale)
#左右翻轉(zhuǎn)圖像
apply(img, torchvision.transforms.RandomHorizontalFlip())
#上下翻轉(zhuǎn)圖像
apply(img, torchvision.transforms.RandomVerticalFlip())
#隨機(jī)裁剪
#200,200表示在多大的區(qū)域進(jìn)行,0,1,1表示圖片裁出來的東西要保留多大的原始圖片,從0.1到1隨機(jī)選一個數(shù);ratio表示高寬比
shape_aug = torchvision.transforms.RandomResizedCrop((200, 200), scale=(0.1, 1), ratio=(0.5, 2))
apply(img, shape_aug)
#隨機(jī)更改圖像的亮度
#分別表示亮度,對比度,飽和度,顏色四個參數(shù)
apply(img,torchvision.transforms.ColorJitter(brightness=0.5, contrast=0,saturation=0, hue=0))
#隨機(jī)更改圖像的色調(diào)
apply(img,torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0,hue=0.5))
#隨機(jī)更改圖像的亮度(brightness)、對比度(contrast)、飽和度(saturation)和色調(diào)(hue)
color_aug = torchvision.transforms.ColorJitter(brightness=0.5, contrast=0.5,saturation=0.5, hue=0.5)
apply(img, color_aug)
#結(jié)合多種圖像增廣方法
#先水平翻轉(zhuǎn)再顏色、形狀變(組合了)
augs = torchvision.transforms.Compose([torchvision.transforms.RandomHorizontalFlip(), color_aug, shape_aug])
apply(img, augs)
#使用圖像增廣進(jìn)行訓(xùn)練
all_images = torchvision.datasets.CIFAR10(train=True, root="../data",download=True)
d2l.show_images([all_images[i][0] for i in range(32)], 4, 8, scale=0.8)
plt.show()
#只使用最簡單的隨機(jī)左右翻轉(zhuǎn)
train_augs = torchvision.transforms.Compose([torchvision.transforms.RandomHorizontalFlip(),torchvision.transforms.ToTensor()])
test_augs = torchvision.transforms.Compose([torchvision.transforms.ToTensor()])
#定義一個輔助函數(shù),以便于讀取圖像和應(yīng)用圖像增廣
def load_cifar10(is_train, augs, batch_size):
    dataset = torchvision.datasets.CIFAR10(root="../data", train=is_train,transform=augs, download=True)
    dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=is_train,num_workers=d2l.get_dataloader_workers())
    return dataloader
#定義一個函數(shù),使用多GPU對模型進(jìn)行訓(xùn)練和評估
def train_batch_ch13(net, X, y, loss, trainer, devices):
    if isinstance(X, list):
        X = [x.to(devices[0]) for x in X]
    else:
        X = X.to(devices[0])
    y = y.to(devices[0])
    net.train()
    trainer.zero_grad()
    pred = net(X)
    l = loss(pred, y)
    l.sum().backward()
    trainer.step()
    train_loss_sum = l.sum()
    train_acc_sum = d2l.accuracy(pred, y)
    return train_loss_sum, train_acc_sum
def train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs,devices=d2l.try_all_gpus()):
    timer, num_batches = d2l.Timer(), len(train_iter)
    animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0, 1],legend=['train loss', 'train acc', 'test acc'])
    net = nn.DataParallel(net, device_ids=devices).to(devices[0])
    for epoch in range(num_epochs):
        metric = d2l.Accumulator(4)
        for i, (features, labels) in enumerate(train_iter):
            timer.start()
            l, acc = train_batch_ch13(net, features, labels, loss, trainer,devices)
            metric.add(l, acc, labels.shape[0], labels.numel())
            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[3], None))
        test_acc = d2l.evaluate_accuracy_gpu(net, test_iter)
        animator.add(epoch + 1, (None, None, test_acc))
    print(f'loss {metric[0] / metric[2]:.3f}, train acc 'f'{metric[1] / metric[3]:.3f}, test acc {test_acc:.3f}')
    print(f'{metric[2] * num_epochs / timer.sum():.1f} examples/sec on ')
#定義 train_with_data_aug 函數(shù),使用圖像增廣來訓(xùn)練模型
batch_size, devices, net = 256, d2l.try_all_gpus(), d2l.resnet18(10, 3)
def init_weights(m):
    if type(m) in [nn.Linear, nn.Conv2d]:
        nn.init.xavier_uniform_(m.weight)
net.apply(init_weights)
def train_with_data_aug(train_augs, test_augs, net, lr=0.001):
    train_iter = load_cifar10(True, train_augs, batch_size)
    test_iter = load_cifar10(False, test_augs, batch_size)
    loss = nn.CrossEntropyLoss(reduction="none")
    trainer = torch.optim.Adam(net.parameters(), lr=lr)#Adam是平滑的SGD
    train_ch13(net, train_iter, test_iter, loss, trainer, 10, devices)
    plt.show()
#訓(xùn)練模型
train_with_data_aug(train_augs, test_augs, net)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前題目:pytorch深度學(xué)習(xí)實(shí)戰(zhàn)lesson33-創(chuàng)新互聯(lián)
文章起源:http://jinyejixie.com/article30/dijeso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)網(wǎng)頁設(shè)計公司、網(wǎng)站導(dǎo)航、企業(yè)網(wǎng)站制作、建站公司、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
长宁区| 滦平县| 林周县| 五华县| 乌什县| 岫岩| 新营市| 化隆| 革吉县| 乌什县| 固始县| 海阳市| 大石桥市| 桐乡市| 景宁| 益阳市| 湾仔区| 鲁山县| 巧家县| 安吉县| 宣汉县| 外汇| 江口县| 乌苏市| 会同县| 安多县| 涞源县| 乌拉特后旗| 呼图壁县| 得荣县| 蒲江县| 嵩明县| 贡觉县| 建水县| 上思县| 惠来县| 栖霞市| 陵川县| 江孜县| 兰溪市| 策勒县|