iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
AI & Data

Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型系列 第 21

Day-20 用 Pytorch 的最後一個塊拼圖

  • 分享至 

  • xImage
  •  
  • 那我們已經在昨天說明了 Pytorch 的 Dataset 跟 DataLoader 要如何建立了,所以我們今天就來實際把最後的 Iris Logistic Regression 也全部更新成全 Pytorch 版本吧~
  • 那我們今天就從頭開始解釋,也就是從取得資料開始,一路寫到最後 Training

Set-0x0 Data prepare

  • 所有機器學習的第一步一定是取得資料,因此我們今天就拿整個 Iris 的資料來做使用吧~
  • 第一步當然就是建立我們的 Iris Dataset
# 0) data import and set as pytorch dataset
from sklearn import datasets

class IrisDataset(Dataset):

    # data loading
    def __init__(self):
        iris = datasets.load_iris()
        feature = pd.DataFrame(iris.data, columns=iris.feature_names)
        target = pd.DataFrame(iris.target, columns=['target'])
        iris_data = pd.concat([target, feature], axis=1)
        # keep only Iris-Setosa and Iris-Versicolour classes
        iris_data = iris_data[iris_data.target <= 1]
        self.x = torch.from_numpy(np.array(iris_data)[:, 1:])
        self.y = torch.from_numpy(np.array(iris_data)[:, [0]])
        self.n_samples = self.x.shape[0]

    # working for indexing
    def __getitem__(self, index):
        
        return self.x[index], self.y[index]

    # return the length of our dataset
    def __len__(self):

        return self.n_samples


dataset = IrisDataset()
  • 第二步就是切分我們的資料並且把 Dataloader 建立好
# create data spliter
def dataSplit(dataset, val_split=0.25, shuffle=False, random_seed=0):

    dataset_size = len(dataset)
    indices = list(range(dataset_size))
    split = int(np.floor(val_split * dataset_size))
    if shuffle:
        np.random.seed(random_seed)
        np.random.shuffle(indices)
    
    train_indices, val_indices = indices[split:], indices[:split]
    train_sampler = SubsetRandomSampler(train_indices)
    valid_sampler = SubsetRandomSampler(val_indices)

    return train_sampler, valid_sampler

# base data parameters
batch_size = 16
val_split = 0.25
shuffle_dataset = True
random_seed= 42

train_sampler, valid_sampler = \
    dataSplit(dataset=dataset, val_split=val_split, shuffle=shuffle_dataset, random_seed=random_seed)

train_loader = DataLoader(dataset, batch_size=batch_size, sampler=train_sampler)
val_loader = DataLoader(dataset, batch_size=batch_size, sampler=valid_sampler)
  • 剩下的步驟就跟之前一樣了,所以我們就直接看完整版的 code 吧~

完整程式碼

{%gist 2035d6a1eb4cf873427535f0f61a01df%}

每日小結

  • 我們總算利用 Logistic Regression 搭配 Iris Dataset 完整的解釋完從最開始的 Dataset 建立,到訓練的 Dataloader 建立使用,還有 Model 的建立跟 Loss function、Optimizer 的使用,完整的把整個從零開始的過程全部轉換成 Pytorch 的樣子
  • 我們也成功的利用的 Pytorch 訓練出了屬於自己的第一個 Pytorch Logistic Regression Model 了,這是我們在機器學習的道路上踏出的第一步,明天就可以讓我們趁勝追擊,建立屬於我們的第一個類神經模型吧~

上一篇
Day-19 PyTorch 怎麼讀取資料? Dataset and DataLoader
下一篇
Day-21 實際重現神經元是可做到的嗎? Feed-Forward Neural Network Building
系列文
Deep Learning 從零開始到放棄的 30 天 PyTorch 數字辨識模型31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言