【动手学习深度学习--逐行代码解析合集】06多层感知机的从零开始实现

【动手学习深度学习】逐行代码解析合集

06多层感知机的从零开始实现


视频链接:动手学习深度学习–多层感知机的从零开始实现
课程主页:https://courses.d2l.ai/zh-v2/
教材:https://zh-v2.d2l.ai/

1、多层感知机

在这里插入图片描述

在这里插入图片描述
2、从线性到非线性

在这里插入图片描述


在这里插入图片描述
3、激活函数

ReLU激活函数

在这里插入图片描述

ReLU激活函数及其导数
ReLU激活函数
在这里插入图片描述

在这里插入图片描述
sigmoid函数

在这里插入图片描述
sigmoid在隐藏层中已经较少使用, 它在大部分时候被更简单、更容易训练的ReLU所取代。

在这里插入图片描述

sigmoid激活函数及其导数
在这里插入图片描述
在这里插入图片描述

tanh函数

在这里插入图片描述
在这里插入图片描述

tanh函数的形状类似于sigmoid函数, 不同的是tanh函数关于坐标系原点中心对称。

tanh激活函数及其导数
在这里插入图片描述
在这里插入图片描述

4、代码

import torch
from torch import nn
from d2l import torch as d2l
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

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

"====================1、初始化模型参数===================="
# Fashion-MNIST中的每个图像由28*28=784个灰度像素值组成。所有图像共分为10个类别。
# 首先,我们将实现一个具有单隐藏层的多层感知机, 它包含256个隐藏单元。
num_inputs, num_outputs, num_hiddens = 784, 10, 256

# normal 和 randn 的区别是normal可以自己设定方差,而randn只是生成
# randn*0.01 等价于 normal(0,0.01)
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]
"====================2、实现ReLU激活函数===================="
def relu(X):
    # a的数据类型和形状与X都相同,只不过元素值都为0
    a = torch.zeros_like(X)
    return torch.max(X, a)

"====================3、实现模型===================="
# 因为我们忽略了空间结构, 所以我们使用reshape将每个二维图像转换为一个长度为num_inputs的向量。
def net(X):
    X = X.reshape((-1, num_inputs))
    H = relu(X@W1 + b1)  # 这里“@”代表矩阵乘法
    return (H@W2 + b2)

"====================4、损失函数===================="
loss = nn.CrossEntropyLoss(reduction='none')

"====================5、训练===================="
# 多层感知机的训练过程与softmax回归的训练过程完全相同
num_epochs, lr = 10, 0.1
updater = torch.optim.SGD(params, lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)

# 为了对学习到的模型进行评估,我们将在一些测试数据上应用这个模型。
d2l.predict_ch3(net, test_iter)
d2l.plt.show()

5、运行结果

在这里插入图片描述


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值