Pytorch 实用入门实践 - 基于手写图像集快速搭建神经网络

本节课主要将两件事情:

1. Pytorch 搭建分类神经网络

2. 神经网络基本架构

---

0 项目准备:

这里先下载数据,这里主要是下载手写 mnist 数据集;

这个数据集是打过标签的手写数字,并且以 pickle 形式存储。

# 新建一个 path 文件夹,用以存储数据

import os

path = 'data/mnist/'

os.makedirs(path, exist_ok=True)

# 通过 url 下载数据集到本地相对位置的文件夹下

URL='http://deeplearning.net/data/mnist/'

FILENAME='mnist.pkl.gz'

urlretrieve(URL+FILENAME, 'data/mnist/'+FILENAME)

# 读入相关数据

((x, y), (x_valid, y_valid), _) = pickle.load(gzip.open(path+FILENAME, 'rb'), encoding='latin-1')

读入数据之后,先了解一下数据。

type(x), x.shape, type(y), y.shape

---

(numpy.ndarray, (50000, 784), numpy.ndarray, (50000,))

训练集 x 是 50000 个图像,每个图像都是 784 个像素点,也就是 28*28 的图形,成 1d 排列。

训练集的标签 y 就是 50000 的标签,分别为 0-9 的 9 个数字。

# 显示单个图

def show(img, title=None):

    plt.imshow(img, cmap="gray")

    if title is not None: plt.title(title)

# 显示多组图,分两行显示

def plots(ims, figsize=(12,6), rows=2, titles=None):

    f = plt.figure(figsize=figsize)

    cols = len(ims)//rows

    for i in range(len(ims)):

        sp = f.add_subplot(rows, cols, i+1)

        sp.axis('Off')

        if titles is not None:

            sp.set_title(titles[i], fontsize=16)

        plt.imshow(ims[i], cmap='gray')

输出看一下结果:

show(x_imgs[0], y_valid[0])


nums = 20

plots(x_imgs[:nums], titles=y_valid[:nums])


1 Pytorch 神经网络

网络的搭建分别几步,复杂的结构都是在网络的基础上调整。

- 网络结构

- 参数设置

- 训练期间确认参数合理

1.1 网络结构

一般神经网络就是:

        (一层网络 + 一层激活层)* n + 输出层

        - 激活层:ReLU 或者 LeakyReLU

        - 输出层:softmax 多个类别中识别一个结果

                         sigmoid 可以识别多个结果

由于网络层都是线性相连,所以从理论上来说,需要激活层(也叫非线性层),来进行转化,不然无法达到非线性模拟的效果。

# torch 的封装式实现

import torch.nn as nn

net = nn.Sequential( nn.Linear(28*28, 100),

    nn.ReLU(),

    nn.Linear(100, 100),

    nn.ReLU(),

    nn.Linear(100, 10),

    nn.LogSoftmax())

1.2 参数设置

参数设置的时候,我们需要知道:

- epoch:训练的次数

- crit:误差函数

- opt:优化函数

- metrics:评价函数

在这里,epoch 可以设置成 10 以下的值,先做测试。

crit 此处由于是多类别的分类,因此我们选择 binary loss,也就是 NLLLoss() 。

opt 可以直接调用 porch 的内部设置,SGD 或者 ADAM 都可以。

metrics 就是我们关心的正确情况,在这里是 判断正确的个数比重。这个部分我们可以自己写。

loss = nn.NLLLoss()

preds = net(x)

metrics = np.mean(preds == y_valid)

opt = optim.SGD(net.parameters(), 1e-1, momentum=0.9, weight_decay=1e-3)

1.3 确认参数合理

在这个部分我们就需要在训练的时候不断输出合适的模型参数,用以追踪所有的评价情况指标。

因此我们在写自己的 epoch 循环的时候,我们需要输出我们需要检测的 metrics。

if epoch % 10 == 0:

    print("loss: ", l.data[0], "\t accuracy: ", metric)

1.4 模型实现

import torch.nn as nn

# 建立模型

net = nn.Sequential( nn.Linear(28*28, 100),    nn.ReLU(),    nn.Linear(100, 100),    nn.ReLU(),    nn.Linear(100, 10),    nn.LogSoftmax() )

loss = nn.NLLLoss()

epoch = 100

opt = optim.SGD(net.parameters(), 1e-1, momentum=0.9, weight_decay=1e-3)

for n in epoch:

    # 输出output

    pred = net(x)

    # 计算误差

    l = loss(pred, y_val)

    # 原始优化清零

    opt.zero_grad()

    # 误差梯度计算

    l.backward()

    # 误差更新权重

    opt.step()

    # 每 10 步,输出一个结果来检测 

    if n%10 == 0:

        print('accuracy', np.mean(pred == y_val))


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容