• MLP感知机python实现


    from torch import nn
    from softmax回归 import train_ch3
    import torch
    import torchvision
    from torch.utils import data
    from torchvision import transforms
    
    # ①准备数据集
    def load_data_fashion_mnist(batch_size, resize=None):
        # PyTorch中的一个转换函数,它的作用是将一个PIL Image或numpy.ndarray图像转换为一个Tensor数据类型。
        trans = [transforms.ToTensor()]
        # 是否需要改变大小
        if resize:
            trans.insert(0, transforms.Resize(resize))
        # 函数compose将这些转换操作组合起来
        trans = transforms.Compose(trans)
        # 训练数据
        mnist_train = torchvision.datasets.FashionMNIST(
            root="../data", train=True, transform=trans, download=True)
        # 测试数据
        mnist_test = torchvision.datasets.FashionMNIST(
            root="../data", train=False, transform=trans, download=True)
        # 返回值
        return (torch.utils.data.DataLoader(mnist_train, batch_size, shuffle=True,
                                            num_workers=4),
                torch.utils.data.DataLoader(mnist_test, batch_size, shuffle=False,
                                            num_workers=4))
    # 批量大小为256
    batch_size = 256
    # 获取训练数据集和测试数据集
    train_iter, test_iter = load_data_fashion_mnist(batch_size)
    
    # ②实现一个具有单隐藏层的多层感知机,它包含256个隐藏单元
    # 定义输入,输出,隐藏层大小
    num_inputs, num_outputs, num_hiddens = 784, 10, 256
    # 定义W1、b1、W2、b2
    W1 = nn.Parameter(
        torch.randn(num_inputs, num_hiddens, requires_grad=True) * 0.01)
    b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))
    W2 = nn.Parameter(
        torch.randn(num_hiddens, num_outputs, requires_grad=True) * 0.01)
    b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))
    
    params = [W1, b1, W2, b2]
    
    # ③实现ReLU激活函数
    def relu(X):
        a = torch.zeros_like(X)
        return torch.max(X, a)
    
    # ④实现模型
    def net(X):
        # x=256*784
        X = X.reshape((-1, num_inputs))
        # torch.matmul(X,W1)= 256*256
        H = relu(torch.matmul(X,W1) + b1)
        # torch.matmul(H,W2) = 256*10
        return (torch.matmul(H,W2) + b2)
    
    # ⑤定义损失函数
    loss = nn.CrossEntropyLoss()
    
    # ⑥训练
    # 定义学习率
    lr =  0.1
    # 优化函数
    updater = torch.optim.SGD(params, lr=lr)
    
    # 训练
    if __name__ == '__main__':
        num_epochs = 10
        train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    训练结果

    训练损失:0.0015049066459139188
    训练精度:0.86405
    测试精度:0.8453
    
    • 1
    • 2
    • 3

    貌似是比softmax十次好一些

  • 相关阅读:
    PageHelp插件在复杂sql下引起的Having无法识别错误及其解决方案
    图解DockerRegistry与CharMuseum
    开发过程中遇到奇奇怪怪的东西之二:路由嵌套层级太深导致页面刷选不成功
    AC自动机
    (十)Mybatis之动态SQL
    JavaScript的变量和数据类型介绍、JavaScript的关系运算、JavaScript的逻辑运算
    世界杯叠加购物节日,预计用户消费和品牌营销将迎来大幅增长
    CSS学习笔记
    非零基础自学Java (老师:韩顺平) 第8章 面向对象编程(中级部分) 8.4 包
    图的基础知识(数据结构)
  • 原文地址:https://blog.csdn.net/qq_39879126/article/details/134473974