pytorch学习笔记(7)

#  多层感知机代码实现

num_inputs, num_outputs, num_hiddens = 784, 10, 256  #分别表示输入维度,输出维度,隐藏层

W1 = nn.Parameter(torch.randn(
    num_inputs, num_hiddens, requires_grad=True) * 0.01)  # w1为行数为784,列数为256的随机数矩阵
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True)) #b1为行数为256的全0向量
W2 = nn.Parameter(torch.randn(
    num_hiddens, num_outputs, requires_grad=True) * 0.01) #w2行数为7256,列数为10的随机数
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True)) #b2为行数为10的全0向量

params = [W1, b1, W2, b2]

 

def relu(X):
    a = torch.zeros_like(X)  # 创建一个与x形状一样的全零矩阵
    return torch.max(X, a)   # 比较x与a的大小,哪个大返回哪个

 

def net(X):
    X = X.reshape((-1, num_inputs))  #  X 重新排列为一个形状为 (-1, num_inputs) 的二维数组,其中行数将由NumPy自动计算,以确保总元素数量不变,而列数将变为 num_inputs。
    H = relu(X@W1 + b1)  # 这里“@”代表矩阵乘法
    return (H@W2 + b2)

 损失函数还是为交叉熵损失

 训练模型

 

sofxmax回归的训练图
softmax训练的图像

可以看到与softmax相比,多层感知机的loss明显下降而精度却没有显著变化。

#  简介实现

net = nn.Sequential(nn.Flatten(),  #nn.Flatten():这是一个用于将输入数据展平的层。它将输入的多维数据(通常是图像数据)转换成一维向量,以便供后续全连接层使用。这是因为全连接层需要一维输入。
                    nn.Linear(784, 256),  #这是一个全连接层,有784个输入特征和256个输出特征。这一层的作用是将展平后的图像数据映射到一个具有256个特征的中间表示。
                    nn.ReLU(),
                    nn.Linear(256, 10))  #这是另一个全连接层,有256个输入特征和10个输出特征。最后一层通常用于多类别分类问题,这里的10表示输出10个类别的预测分数。

def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)  #这行代码使用 PyTorch 的 nn.init.normal_ 函数来对全连接层的权重进行初始化。具体地,它使用均值为0、标准差为0.01的正态分布随机值来初始化权重(m.weight)。

net.apply(init_weights);  #这行代码将初始化函数 init_weights 应用于神经网络模型 net 的所有子模块(层)。在这里,它会初始化所有的全连接层的权重。

 训练

batch_size, lr, num_epochs = 256, 0.1, 10  #批量大小为256, 学习率为0.1, 训练轮数为10
loss = nn.CrossEntropyLoss(reduction='none') #使用交叉熵损失
trainer = torch.optim.SGD(net.parameters(), lr=lr)

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值