深度学习pytorch——全连接层(持续更新)

本文介绍了如何使用PyTorch库构建一个简单的多层感知机(MLP)模型,对MNIST数据集进行训练和测试,包括数据预处理、模型定义、优化器选择和评估指标计算。
摘要由CSDN通过智能技术生成
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms


batch_size=200
learning_rate=0.01
epochs=10

# 加载数据
train_loader = torch.utils.data.DataLoader(
    datasets.MNIST('../data', train=True, download=True,
                   transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ])),
    batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(
    datasets.MNIST('../data', train=False, transform=transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.1307,), (0.3081,))
    ])),
    batch_size=batch_size, shuffle=True)

#一般采用以下的写法,nn.Linear自带了自己的初始化方式,一般够用,不够的话就要自己写
#注意 nn.ReLU与 F.relu的区别
# 第一步、继承nn.Module,
class MLP(nn.Module):

    def __init__(self):
        super(MLP, self).__init__()
# 第二步、在__init__中初始化layer
        self.model = nn.Sequential(
            nn.Linear(784, 200),
            nn.ReLU(inplace=True),
            nn.Linear(200, 200),
            nn.ReLU(inplace=True),
            nn.Linear(200, 10),
            nn.ReLU(inplace=True),
        )
# 第三步执行forward
    def forward(self, x):
        x = self.model(x)
        return x

net = MLP()
optimizer = optim.SGD(net.parameters(), lr=learning_rate)
criteon = nn.CrossEntropyLoss()
# 训练
for epoch in range(epochs):

    for batch_idx, (data, target) in enumerate(train_loader):
        data = data.view(-1, 28*28)

        logits = net(data) #注意这里是logits
        loss = criteon(logits, target)

        optimizer.zero_grad()
        loss.backward()
        # print(w1.grad.norm(), w2.grad.norm())
        optimizer.step()

        if batch_idx % 100 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                       100. * batch_idx / len(train_loader), loss.item()))

# 测试
    test_loss = 0
    correct = 0
    for data, target in test_loader:
        data = data.view(-1, 28 * 28)
        logits = net(data)
        test_loss += criteon(logits, target).item()

        pred = logits.data.max(1)[1]
        correct += pred.eq(target.data).sum()

    test_loss /= len(test_loader.dataset)
    print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
        test_loss, correct, len(test_loader.dataset),
        100. * correct / len(test_loader.dataset)))
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch中,前馈全连接层是**构建神经网络的基本组件之一**。以下是有关PyTorch前馈全连接层的详细介绍: 1. **定义**:前馈全连接层(Feed-Forward Linear Layer)是由多个神经元组成的层,其中每个神经元都与前一层的所有神经元相连接。在这种结构中,信息从输入层流向隐藏层,最后流向输出层,过程中没有回路,即不包含任何形式的反馈或循环。 2. **创建**:在PyTorch中,可以通过`torch.nn.Linear`类来创建一个全连接层。这个类接受两个参数:输入特征的数量和输出特征的数量。例如,`nn.Linear(10, 5)`会创建一个接受10个输入特征并输出5个特征的全连接层。 3. **作用**:全连接层的主要作用是进行特征的线性变换。它通过将输入数据与权重矩阵相乘,并添加一个偏置项来进行计算。这种变换可以帮助网络学习输入和输出之间的复杂映射关系。 4. **激活函数**:为了引入非线性特性,通常会在全连接层之后添加激活函数,如ReLU、Sigmoid或Tanh等。这样可以使网络能够捕捉到更加复杂的数据模式。 5. **训练**:在训练过程中,全连接层的权重和偏置会根据反向传播算法和优化器(如SGD、Adam等)来更新,以最小化损失函数,从而提高网络的预测性能。 6. **应用**:前馈全连接层广泛应用于各种类型的神经网络中,无论是用于回归问题还是分类问题,它们都是构建深层网络的基础。 此外,在搭建一个简单的前馈全连接层网络时,通常需要定义网络的架构,包括各层的节点数、激活函数类型等,然后通过数据进行训练,最终得到一个可以用于预测或分类的模型。 总的来说,前馈全连接层是神经网络中不可或缺的一部分,它们负责处理信息的传递和转换,是深度学习模型的核心组成部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值