#多层感知机从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)
P10 多层感知机
最新推荐文章于 2024-10-09 11:27:01 发布