P10 多层感知机

#多层感知机从0开始实现

import torch
from torch import nn
from d2l import torch as d2l
import torchvision
from torch.utils import data
from torchvision import transforms

#读取MNIST数据

trans = transforms.ToTensor()
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)

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) #想一想问什么是random,如果全部设成1或者0结果是什么?
                  )
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]
#实现RuLU激活函数
def relu(X):
    a = torch.zeros_like(X)
    return torch.max(X,a)

#实现模型
def net(X):
    X=X.reshape((-1,num_inputs)) #把x拉成二维的矩阵
    H = relu(X @ W1+b1) #先做矩阵乘法
    return(H @ W2 + b2)

loss = nn.CrossEntropyLoss()

#多层感知机的训练过程与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)

result = d2l.predict_ch3(net, test_iter)

print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值