zoukankan      html  css  js  c++  java
  • MXNET:多层感知机

    从零开始

    前面了解了多层感知机的原理,我们来实现一个多层感知机。

    # -*- coding: utf-8 -*-
    from mxnet import init
    
    from mxnet import ndarray as nd
    from mxnet.gluon import loss as gloss
    import gb
    
    # 定义数据源
    batch_size = 256
    train_iter, test_iter = gb.load_data_fashion_mnist(batch_size)
    
    # 定义模型参数
    num_inputs = 784
    num_outputs = 10
    num_hiddens = 256
    
    W1 = nd.random.normal(scale=0.01, shape=(num_inputs, num_hiddens))
    b1 = nd.zeros(num_hiddens)
    W2 = nd.random.normal(scale=0.01, shape=(num_hiddens, num_outputs))
    b2 = nd.zeros(num_outputs)
    params = [W1, b1, W2, b2]
    
    for param in params:
        param.attach_grad()
    
    # 定义激活函数
    def relu(X):
        return nd.maximum(X, 0)
    
    # 定义模型
    def net(X):
        X = X.reshape((-1, num_inputs))
        H = relu(nd.dot(X, W1) + b1)
        return nd.dot(H, W2) + b2
    
    # 定义损失函数
    loss = gloss.SoftmaxCrossEntropyLoss()
    
    # 训练模型
    num_epochs = 5
    lr = 0.5
    gb.train_cpu(net, train_iter, test_iter, loss, num_epochs, batch_size,
                 params, lr)
    

    添加隐层后,模型的性能大幅提升

    # output
    epoch 1, loss 0.5029, train acc 0.852, test acc 0.934
    epoch 2, loss 0.2000, train acc 0.943, test acc 0.956
    epoch 3, loss 0.1431, train acc 0.959, test acc 0.964
    epoch 4, loss 0.1138, train acc 0.967, test acc 0.968
    epoch 5, loss 0.0939, train acc 0.973, test acc 0.973
    

    在定义模型参数和定义模型步骤,仍然有一些繁琐。

    使用Gluon

    # -*- coding: utf-8 -*-
    from mxnet import init
    
    from mxnet import ndarray as nd
    from mxnet.gluon import loss as gloss
    import gb
    
    # 定义数据源
    batch_size = 256
    train_iter, test_iter = gb.load_data_fashion_mnist(batch_size)
    
    # 定义模型
    from mxnet.gluon import nn
    net = nn.Sequential()
    net.add(nn.Dense(256, activation='relu'))
    net.add(nn.Dense(10))
    net.add(nn.Dense(10))
    net.initialize(init.Normal(sigma=0.01))
    
    # 定义损失函数
    loss = gloss.SoftmaxCrossEntropyLoss()
    
    # 训练模型
    from mxnet import gluon
    trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.5})
    num_epochs = 5
    gb.train_cpu(net, train_iter, test_iter, loss, num_epochs, batch_size,
                 None, None, trainer)
    
    # output
    epoch 1, loss 1.3065, train acc 0.525, test acc 0.814
    epoch 2, loss 0.2480, train acc 0.928, test acc 0.950
    epoch 3, loss 0.1442, train acc 0.958, test acc 0.961
    epoch 4, loss 0.1060, train acc 0.969, test acc 0.971
    epoch 5, loss 0.0807, train acc 0.976, test acc 0.973
    
  • 相关阅读:
    logging模块,序列化,range模块
    生成器以及推导式
    递归,自定义模块,time模块,datetime
    装饰器,内置函数
    函数名的使用以及第一类对象,闭包,迭代器
    python文件操作
    面向对象
    os sys hashlib
    文件操作
    logging模块
  • 原文地址:https://www.cnblogs.com/houkai/p/9520970.html
Copyright © 2011-2022 走看看