Day-20 用 Pytorch 的最後一个块拼图

  • 那我们已经在昨天说明了 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 21 - 依 Home 前台页面分析拆解後,逐步建立後台功能 - GridView 事件应用 - ASP.NET Web Forms C#

>>:  Day21 CSS完成简单的网页排版!

Day23 ( 游戏设计 ) 射击幽浮

射击幽浮 教学原文参考:射击幽浮 这篇文章会介绍如何使用「建立游戏角色」、「游戏角色座标」、「游戏角...

Kneron - 在Raspberry Pi 4(Raspbian Buster)上安装 OpenCV 参考笔记

Kneron - 在Raspberry Pi 4(Raspbian Buster)上安装 OpenC...

Day 16 - 演算大法好逼

简介 这篇是演算大法的下半部。 有 sorting 、 search 各两种方式以及他们的差别。 C...

第47天-学习一次性排程工作 at

今天进度 : 鸟哥私房菜 - 第十五章、例行性工作排程(crontab) 使用 systemctl ...

【第30天】最终回

玉山竞赛心得 从朋友口中得知玉山银行和趋势科技举办了中文手写字辨识的比赛,於是我们召集资策会夥伴们组...