最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch + visdom CNN處理自建圖片數(shù)據(jù)集的方法

 更新時(shí)間:2018年06月04日 14:12:37   作者:泛泛之素  
這篇文章主要介紹了pytorch + visdom CNN處理自建圖片數(shù)據(jù)集的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

環(huán)境

系統(tǒng):win10

cpu:i7-6700HQ

gpu:gtx965m

python : 3.6

pytorch :0.3

數(shù)據(jù)下載

來(lái)源自Sasank Chilamkurthy 的教程; 數(shù)據(jù):下載鏈接。

下載后解壓放到項(xiàng)目根目錄:

 

數(shù)據(jù)集為用來(lái)分類 螞蟻和蜜蜂。有大約120個(gè)訓(xùn)練圖像,每個(gè)類有75個(gè)驗(yàn)證圖像。

數(shù)據(jù)導(dǎo)入

可以使用 torchvision.datasets.ImageFolder(root,transforms) 模塊 可以將 圖片轉(zhuǎn)換為 tensor。

先定義transform:

ata_transforms = {
  'train': transforms.Compose([
    # 隨機(jī)切成224x224 大小圖片 統(tǒng)一圖片格式
    transforms.RandomResizedCrop(224),
    # 圖像翻轉(zhuǎn)
    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([
    # 圖片大小縮放 統(tǒng)一圖片格式
    transforms.Resize(256),
    # 以中心裁剪
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
  ])
}

導(dǎo)入,加載數(shù)據(jù):

data_dir = './hymenoptera_data'
# trans data
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'val']}
# load data
data_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'].classes
print(data_sizes, class_names)

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

訓(xùn)練集 244圖片 , 測(cè)試集153圖片 。

可視化部分圖片看看,由于visdom支持tensor輸入 ,不用換成numpy,直接用tensor計(jì)算即可 :

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 + mean
inp = torch.transpose(inp, 0, 2)
viz.images(inp)

創(chuàng)建CNN

net 根據(jù)上一篇的處理cifar10的改了一下規(guī)格:

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,優(yōu)化函數(shù):

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)

參數(shù):

BATCH_SIZE = 4
LR = 0.001
EPOCHS = 10

運(yùn)行 10個(gè) 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.686
Training complete in 1m 16s
Best val Acc: 0.712418

運(yùn)行 20個(gè)看看:

[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.706
Training complete in 2m 30s
Best val Acc: 0.745098

準(zhǔn)確率比較低:只有74.5%

我們使用models 里的 resnet18 運(yùn)行 10個(gè)epoch:

model = torchvision.models.resnet18(True)
num_ftrs = model.fc.in_features
model.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.667
Training complete in 1m 24s
Best val Acc: 0.686275

效果也很一般,想要短時(shí)間內(nèi)就訓(xùn)練出效果很好的models,我們可以下載訓(xùn)練好的state,在此基礎(chǔ)上訓(xùn)練:

model = torchvision.models.resnet18(pretrained=True)
num_ftrs = model.fc.in_features
model.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.954
Training complete in 1m 25s
Best val Acc: 0.954248

10個(gè)epoch直接的到95%的準(zhǔn)確率。

示例代碼:https://github.com/ffzs/ml_pytorch/blob/master/ml_pytorch_hymenoptera

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫(kù)的方法

    Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Python 中使用 PyMySQL模塊操作數(shù)據(jù)庫(kù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python繪圖之在父組件中使用子組件的函數(shù)詳解

    Python繪圖之在父組件中使用子組件的函數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了Python在項(xiàng)目開發(fā)時(shí),如何實(shí)現(xiàn)在父組件中使用子組件的函數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-08-08
  • Python中深淺拷貝的區(qū)別詳細(xì)分析

    Python中深淺拷貝的區(qū)別詳細(xì)分析

    深拷貝和淺拷貝都是對(duì)原對(duì)象的拷貝,都會(huì)生成一個(gè)看起來(lái)相同的對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Python中深淺拷貝的區(qū)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • python交互式圖形編程實(shí)例(二)

    python交互式圖形編程實(shí)例(二)

    這篇文章主要為大家詳細(xì)介紹了python交互式圖形編程實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳解Python中xlsxwriter庫(kù)的基本操作

    詳解Python中xlsxwriter庫(kù)的基本操作

    xlsxwriter是一個(gè)用于創(chuàng)建和修改Excel文件(.xlsx)的Python庫(kù),它提供了豐富的功能,可以創(chuàng)建復(fù)雜的Excel工作簿,本文為大家介紹了它的一些基本操作,希望對(duì)大家有所幫助
    2023-11-11
  • python之停止打印日志/重復(fù)打印日志方式

    python之停止打印日志/重復(fù)打印日志方式

    這篇文章主要介紹了python停止打印日志/重復(fù)打印日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python代碼實(shí)現(xiàn)五子棋游戲

    python代碼實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python代碼實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python元組常見操作示例

    Python元組常見操作示例

    這篇文章主要介紹了Python元組常見操作,結(jié)合實(shí)例形式分析了Python元組的概念、功能、常見定義、獲取、遍歷等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • 一文帶你了解Python閉包的基本用法

    一文帶你了解Python閉包的基本用法

    Python 是一種高級(jí)編程語(yǔ)言,擁有強(qiáng)大的功能和工具庫(kù)。Python 的閉包是一個(gè)強(qiáng)大的編程概念,可以幫助程序員編寫更加模塊化、可重用的代碼。本文將深入介紹 Python 的閉包,從概念、定義、實(shí)現(xiàn)、應(yīng)用等多個(gè)角度詳細(xì)闡述
    2023-03-03
  • 使用Python抓取模板之家的CSS模板

    使用Python抓取模板之家的CSS模板

    本文給大家介紹的是使用Python抓取模板之家的CSS模板并打包成zip文件的代碼,使用的是單線程,非常簡(jiǎn)單實(shí)用,這里分享給大家,有相同需求的小伙伴參考下吧。
    2015-03-03

最新評(píng)論

岚皋县| 福安市| 玉林市| 延庆县| 虞城县| 阳泉市| 隆昌县| 吉隆县| 准格尔旗| 措勤县| 建德市| 麻江县| 文化| 五河县| 大关县| 大港区| 高雄县| 体育| 同仁县| 宜君县| 贡嘎县| 陆河县| 湛江市| 孝义市| 延长县| 广德县| 林西县| 龙井市| 出国| 句容市| 曲麻莱县| 会东县| 大同县| 邛崃市| 宁化县| 临城县| 定南县| 乐都县| 陈巴尔虎旗| 扎兰屯市| 阳春市|