导入必要的库

import torch from torch import nn from d2l import torch as d2l

定义dropout函数

def dropout_layer(X, dropout): # dropout的值必须在0-1之间 assert 0 <= dropout <= 1 # 若dropout==1,所有元素都被丢弃 if dropout == 1: return torch.zeros_like(X) # 若dropout==0,所有元素都被保留 if dropout == 0: return X # 生成一个掩蔽矩阵,随机将一些元素置为0 mask = (torch.rand(X.shape) > dropout).float() # 对掩蔽矩阵和原矩阵进行按元素乘法并除以保留比例,得到dropout后的结果 return mask * X / (1.0 - dropout)

测试dropout函数

X = torch.arange(16, dtype=torch.float32).reshape((2, 8)) print(X) print(dropout_layer(X, 0.)) print(dropout_layer(X, 0.5)) print(dropout_layer(X, 1.))

定义一个神经网络模型

num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10, 256, 256 dropout1, dropout2 = 0.2, 0.5 class Net(nn.Module): def init(self, num_inputs, num_outputs, num_hiddens1, num_hiddens2, is_training=True): super(Net, self).init() self.num_inputs = num_inputs self.training = is_training self.lin1 = nn.Linear(num_inputs, num_hiddens1) self.lin2 = nn.Linear(num_hiddens1, num_hiddens2) self.lin3 = nn.Linear(num_hiddens2, num_outputs) self.relu = nn.ReLU()

def forward(self, X):
    # 第一层全连接层
    H1 = self.relu(self.lin1(X.reshape((-1, self.num_inputs))))
    if self.training == True:
        # 在第一层全连接层后添加一个dropout层
        H1 = dropout_layer(H1, dropout1)
    # 第二层全连接层
    H2 = self.relu(self.lin2(H1))
    if self.training == True:
        # 在第二层全连接层后添加一个dropout层
        H2 = dropout_layer(H2, dropout2)
    # 输出层
    out = self.lin3(H2)
    return out

创建神经网络模型

net = Net(num_inputs, num_outputs, num_hiddens1, num_hiddens2)

定义训练的超参数

num_epochs, lr, batch_size = 10, 0.5, 256

定义损失函数

loss = nn.CrossEntropyLoss(reduction='none')

加载数据集

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

定义优化器

trainer = torch.optim.SGD(net.parameters(), lr=lr)

训练模型

d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer

对以下代码进行注释:import torchfrom torch import nnfrom d2l import torch as d2ldef dropout_layerX dropout assert 0 = dropout = 1 # 在本情况中所有元素都被丢弃 if dropout == 1 return torchzeros_likeX # 在本情

原文地址: https://www.cveoy.top/t/topic/ckWU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录