#多层感知机从零开始实现
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)
num_inputs,num_outputs,num_hiddens = 784,10,256
w1 = torch.normal(0,0.01,(num_inputs,num_hiddens),requires_grad=True)
#w1 = nn.Parameter(torch.randn(num_inputs,num_hiddens,requires_grad=True))
b1 = nn.Parameter(torch.zeros(num_hiddens,requires_grad=True))
w2 = torch.normal(0,0.01,(num_hiddens,num_outputs),requires_grad=True)
#w2 = nn.Parameter(torch.randn(num_hiddens,num_outputs,requires_grad=True))
b2 = nn.Parameter(torch.zeros(num_outputs,requires_grad=True))
params = [w1,b1,w2,b2]
def relu(x):#relu激活函数
a = torch.zeros_like(x)#形状一样但元素的值都是0
return torch.max(x,a)#返回最大值
def net(x):
x = x.reshape((-1,num_inputs))
h = relu(x@w1 + b1)#@是矩阵乘法的简写
return (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)
d2l.plt.show()
10-多层感知机从零开始实现 动手深度学习
最新推荐文章于 2024-10-11 16:17:26 发布