1. 程式人生 > >遷移學習(TRANSFER LEARNING)

遷移學習(TRANSFER LEARNING)

在本教程中,您將學習如何使用遷移學習來培訓您的網路。

在實踐中,很少有人從頭開始訓練整個卷積網路(使用隨機初始化),因為擁有足夠大小的資料集是相對少見的。相反,在一個非常大的資料集上預先訓練一個卷積神經網路是很常見的(例如,ImageNet,它包含了120萬個有1000個類別的影象),然後使用“卷積神經網路”作為初始化或固定的功能提取器來完成感興趣的任務。

這兩種主要的轉移學習情景如下:

1)對卷積神經網路的研究:我們用一個預先訓練的網路來初始化網路,就像在imagenet 1000資料集上訓練的那樣。其餘的訓練看起來和往常一樣。

2)在這裡,我們將固定所有網路的權重,除了最後全連線層。最後一個全連線層被替換為一個帶有隨機權重的新層,只有這一層被訓練。

# License: BSD
# Author: Sasank Chilamkurthy

from __future__ import print_function, division

import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim import lr_scheduler
import numpy as np
import torchvision
from torchvision import datasets, models, transforms
import matplotlib.pyplot as plt
import time
import os
import copy

plt.ion()   # interactive mode

資料載入(LOAD DATA)

我們將使用 torchvision 和 torch.utils.data 兩個包來完成資料的載入

我們今天要解決的問題是訓練一個模型來分類螞蟻和蜜蜂。我們為螞蟻和蜜蜂準備了大約120張訓練圖片。每個類有75個驗證映像。通常,如果從頭開始訓練,這是一個非常小的資料集。由於我們使用的是轉移學習,所以我們應該能夠很好地概括。

這個資料集是imagenet的一個非常小的子集。

Download the data from here and extract it to the current directory.