【从零开始学习深度学习】10.自己动手从零开始实现一个多层感知机

简介: 【从零开始学习深度学习】10.自己动手从零开始实现一个多层感知机

首先导入实现所需的包或模块。


import torch
import numpy as np
import sys
import d2lzh_pytorch as d2l  # 之前自己定义的模块

1.1 获取和读取数据


这里继续使用Fashion-MNIST数据集。我们将使用多层感知机对图像进行分类。


batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)


1.2 定义模型参数


Fashion-MNIST数据集中图像形状为 28 × 28 28 \times 2828×28,类别数为10。使用长度为 28 × 28 = 784 28 \times 28 = 78428×28=784 的向量表示每一张图像。因此,输入个数为784,输出个数为10。实验中,我们设超参数隐藏单元个数为256。


num_inputs, num_outputs, num_hiddens = 784, 10, 256
W1 = torch.tensor(np.random.normal(0, 0.01, (num_inputs, num_hiddens)), dtype=torch.float)
b1 = torch.zeros(num_hiddens, dtype=torch.float)
W2 = torch.tensor(np.random.normal(0, 0.01, (num_hiddens, num_outputs)), dtype=torch.float)
b2 = torch.zeros(num_outputs, dtype=torch.float)
params = [W1, b1, W2, b2]
for param in params:
    param.requires_grad_(requires_grad=True)


1.3 定义激活函数


这里我们使用基础的max函数来实现ReLU,而非直接调用relu函数。


def relu(X):
    return torch.max(input=X, other=torch.tensor(0.0))


1.4 定义模型


同之前softmax回归一样,我们通过view函数将每张原始图像改成长度为num_inputs的向量。然后我们实现上一节中多层感知机的计算表达式。


def net(X):
    X = X.view((-1, num_inputs))
    H = relu(torch.matmul(X, W1) + b1)
    return torch.matmul(H, W2) + b2


1.5 定义损失函数


为了得到更好的数值稳定性,我们直接使用PyTorch提供的包括softmax运算和交叉熵损失计算的函数。


loss = torch.nn.CrossEntropyLoss()


1.6 训练模型


训练多层感知机的步骤和3.6节中训练softmax回归的步骤没什么区别。我们直接调用d2lzh_pytorch包中的train_ch3函数,它的实现已经在之前【7.自己动手实现softmax回归的训练与预测】介绍过。我们在这里设超参数迭代周期数为5,学习率为100.0。


num_epochs, lr = 5, 100.0
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, params, lr)


输出:


epoch 1, loss 0.0030, train acc 0.714, test acc 0.753
epoch 2, loss 0.0019, train acc 0.821, test acc 0.777
epoch 3, loss 0.0017, train acc 0.842, test acc 0.834
epoch 4, loss 0.0015, train acc 0.857, test acc 0.839
epoch 5, loss 0.0014, train acc 0.865, test acc 0.845


1.7 完整代码


import torch
import numpy as np
import sys
import d2lzh_pytorch as d2l
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
num_inputs, num_outputs, num_hiddens = 784, 10, 256
W1 = torch.tensor(np.random.normal(0, 0.01, (num_inputs, num_hiddens)), dtype=torch.float)
b1 = torch.zeros(num_hiddens, dtype=torch.float)
W2 = torch.tensor(np.random.normal(0, 0.01, (num_hiddens, num_outputs)), dtype=torch.float)
b2 = torch.zeros(num_outputs, dtype=torch.float)
params = [W1, b1, W2, b2]
for param in params:
    param.requires_grad_(requires_grad=True)
def relu(X):
    return torch.max(input=X, other=torch.tensor(0.0))
def net(X):
    X = X.view((-1, num_inputs))
    H = relu(torch.matmul(X, W1) + b1)
    return torch.matmul(H, W2) + b2
loss = torch.nn.CrossEntropyLoss()
num_epochs, lr = 5, 100.0
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, params, lr)


小结


  • 可以通过手动定义模型及其参数来实现简单的多层感知机。
  • 当多层感知机的层数较多时,本节的实现方法会显得较烦琐,例如在定义模型参数的时候。
相关文章
|
2月前
|
机器学习/深度学习 算法 数据可视化
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-2
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
99 0
|
2月前
|
机器学习/深度学习 Ubuntu Linux
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)-1
计算机视觉+深度学习+机器学习+opencv+目标检测跟踪+一站式学习(代码+视频+PPT)
56 1
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
从零开始学习深度学习:入门指南与实践建议
本文将引导读者进入深度学习领域的大门,从基础概念到实际应用,为初学者提供全面的学习指南和实践建议。通过系统化的学习路径规划和案例实践,帮助读者快速掌握深度学习的核心知识和技能,迈出在人工智能领域的第一步。
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
有什么资源或教程可以帮助我学习深度学习和Python中的深度学习框架?
【2月更文挑战第14天】【2月更文挑战第39篇】有什么资源或教程可以帮助我学习深度学习和Python中的深度学习框架?
|
3月前
|
机器学习/深度学习 自然语言处理 算法
如何学习深度学习
如何学习深度学习
|
4月前
|
机器学习/深度学习 算法 数据可视化
强化深度学习中使用Dyna-Q算法确定机器人问题中不同规划的学习和策略实战(超详细 附源码)
强化深度学习中使用Dyna-Q算法确定机器人问题中不同规划的学习和策略实战(超详细 附源码)
38 0
|
1天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别在自动驾驶系统中的应用研究
【4月更文挑战第28天】 随着人工智能技术的突飞猛进,深度学习在图像识别领域的应用已逐渐成熟,并在自动驾驶系统中扮演着至关重要的角色。本文聚焦于探讨深度学习模型如何优化自动驾驶车辆的图像识别过程,以及这些技术如何提高系统的整体性能和安全性。文中首先介绍了深度学习在图像处理中的基础理论,随后详细分析了卷积神经网络(CNN)在车辆环境感知中的应用,并提出了一种新型的融合算法,该算法能更有效地处理复杂环境下的图像数据。通过实验验证,本研究所提出的模型在多个公开数据集上表现出了优越的识别精度和实时性,为未来自动驾驶技术的发展提供了有价值的参考。
|
2天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第28天】 随着人工智能技术的飞速发展,深度学习已成为推动技术创新的核心动力之一。特别是在图像识别领域,深度学习技术通过模仿人类视觉系统的机制,实现了对复杂视觉信息的高效处理。本文旨在探讨深度学习技术在自动驾驶系统中图像识别的应用,重点分析卷积神经网络(CNN)的结构优化、训练策略以及在实际道路环境中的感知能力提升。此外,文章还讨论了目前面临的主要挑战和未来的发展趋势。
|
2天前
|
机器学习/深度学习 计算机视觉 网络架构
深度学习在图像识别中的应用与挑战
【4月更文挑战第28天】 随着人工智能技术的飞速发展,深度学习已经成为计算机视觉领域的核心动力之一。本文旨在探讨深度学习技术在图像识别任务中的应用及其面临的挑战。首先,我们将概述深度学习的基本原理和关键技术,包括卷积神经网络(CNN)和循环神经网络(RNN)。接着,文章将深入探讨深度学习在图像分类、目标检测以及语义分割等图像识别子领域中的具体应用案例。最后,我们讨论了目前该领域存在的一些主要挑战,如模型泛化能力、计算资源需求以及对抗性攻击,并对未来发展趋势提出展望。