李沐深度学习-04.01多层感知机的从零开始实现

此篇尝试了正常的测试,以及加入测试了偏置值为0的测试,以及层数的添加测试

1.正常的测试
import torch
from torch import nn 
from d2l import torch 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 = 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]

# 激活函数
def relu(X):
    a = torch.zeros_like(X)
    return torch.max(X,a)
# 模型
def net(X):
    X = X.reshape((-1,num_inputs))
    H = relu(torch.mm(X,W1)+b1)
    return (torch.mm(H,W2)+b2)
# 损失函数
loss = nn.CrossEntropyLoss(reduction='none')

#训练
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)

结果如图所示
结果

2.添加层数,修改以下内容
# 初始化模型参数
num_inputs, num_outputs, num_hiddens = 784,10,256

W1 = nn.Parameter(torch.randn(num_inputs,num_hiddens, requires_grad = True) * 0.01)
b1 = nn.Parameter(torch.zeros(num_hiddens,requires_grad = True))
#b1 = torch.tensor(0.,requires_grad=True)

#额外添加的
W2 = nn.Parameter(torch.randn(256,128,requires_grad = True) * 0.01)
b2 = nn.Parameter(torch.zeros(128,requires_grad = True))
W3 = nn.Parameter(torch.randn(128,64,requires_grad = True) * 0.01)
b3 = nn.Parameter(torch.zeros(64,requires_grad = True))


W4 = nn.Parameter(torch.randn(64,10,requires_grad = True) * 0.01)
b4 = nn.Parameter(torch.zeros(num_outputs,requires_grad = True))
#b2 = torch.tensor(0.,requires_grad=True)
params = [W1,b1,W2,b2,W3,b3,W4,b4]

# 模型
def net(X):
    X = X.reshape((-1,num_inputs))
    H1 = relu(torch.mm(X,W1)+b1)
    H2 = relu(torch.mm(H1,W2)+b2)
    H3 = relu(torch.mm(H2,W3)+b3)
    return (torch.mm(H3,W4)+b4)

在这里插入图片描述
训练极少数次数时,已经效果很不错了。

3.原本的模型下,将偏置值设置为0的结果

我没看出来有啥区别
在这里插入图片描述

4.将初始化模型数据的方法由torch.randn*0.01修改为数值较大的高斯分布后的情况如下所示
# 初始化模型参数
num_inputs, num_outputs, num_hiddens = 784, 10, 256

W1 = nn.Parameter(torch.normal(0,1,size=(num_inputs, num_hiddens), requires_grad=True))
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))

W2 = nn.Parameter(torch.normal(0,1,size=(num_hiddens, num_outputs), requires_grad=True))
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))

params = [W1, b1, W2, b2]

结果图。数值的大小还是印象比较大的。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值