pytorch从零搭建神经网络实现多分类(训练自己的数据集)

本文详细讲解如何使用PyTorch构建全连接层网络进行多分类任务,包括模型搭建、前向传播和训练过程。以Fashion-Mnist数据集为例,探讨不同全连接层配置对模型的影响,并提供训练自定义数据集的方法。
摘要由CSDN通过智能技术生成

简介

本文介绍如何使用pytorch搭建基础的神经网络,解决多分类问题。主要介绍了两个模型:①全连接层网络;②VGG11卷积神经网络模型(下次介绍)。为了演示方便,使用了Fashion-Mnist服装分类数据集(10分类数据集,介绍可以去网上搜一下,这里不赘述),也可以在自己的制作的数据集上训练(后面会稍作介绍)。在文章最后会附上完整的可运行的代码。

1 全连接层网络

全连接层网络包括输入层、隐藏层以及输出层。其中隐藏层中可以包括多个全连接层,理论上可以加无数层,加的越多,网络的深度越深。每个全连接层中可以包含多个节点,理论上也可以无数多,节点数越多,网络宽度越宽。但实际上,网络深和宽并不意味着性能越好,需要视情况而定。
一般每一层输出后还要使用激活函数,以及一些正则化手段如dropout。
在这里插入图片描述

1.1 搭建模型
class FCNet(nn.Module):#全连接网络
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(784,512)
        self.fc2 = nn.Linear(512,256)
        self.fc3 = nn.Linear(256,128)
        self.fc4 = nn.Linear(128,64)
        self.fc5 = nn.Linear(64,10)
        self.dropout = nn.Dropout(p=0.2)

    def forward(self,x):
        x = x.view(x.shape[0],-1)
        x_1 = self.dropout(F.relu(self.fc1(x)))
        x_2 = self.dropout(F.relu(self.fc2(x_1)))
        x_3 = self.dropout(F.relu(self.fc3(x_2)))
        x_4 = self.dropout(F.relu(self.fc4(x_3)))
        x_out = F.softmax(self.fc5(x_4),1)
        return x_out

可以看出全连接网络的搭建十分简单,很容易理解。首先创建一个类,继承Module类。初始化后定义各个全连接层,此处的定义并不一定要按照顺序,但为了容易理解,一般按顺序定义。

        self.fc1 = nn.Linear(784,512)#第一层全连接层,节点数为512
        self.fc2 = nn.Linear(512,256)#第二层全连接层,节点数为256

由于Fashion-Mnist数据集的每个样本的特征点数为784(28*28的图片),因此第一层全连接层的输入节点数为784,512则代表该全连接层的输出节点数(即该全连接层有512个节点)。以此类推,若下一层全连接层的节点数为256,则将输入节点数改为512,输出改为256。
①:

        self.fc1 = nn.Linear(784,2048)#第一层全连接层,节点数为2048
        self.fc2 = nn.Linear(2048,10)#第二层全连接层,节点数为10

②:

        self.fc1 = nn.Linear(784,256)#第一层全连接层,节点数为256
        self.fc2 = nn.Linear(256,128)#第二层全连接层,节点数为128
        self.fc3 = nn.Linear(128,10)#第三层全连接层,节点数为10

实际上,对于一个全连接层网络,只需要固定输入节点数ÿ

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值