pytorch深度学习:神经网络实现数据分类(分类问题)

这一节,用pytorch实现神经网络分类问题,再次熟悉pytorch搭建神经网络的步骤。

1. 问题的提出

分类问题是将数据划分种类的一种问题,常见的有二分类和多分类问题,这节就是做一个简单的二分类问题。

同样,我们先做一组数据。其中第一组数据的标签为0,第二组数据标签为1。

# x0,x1是数据,y0,y1是标签
n_data = torch.ones(100, 2)         # 数据的基本形态
x0 = torch.normal(2*n_data, 1)      # 类型0 x data (tensor), shape=(100, 2)
y0 = torch.zeros(100)               # 类型0 y data (tensor), shape=(100, )
x1 = torch.normal(-2*n_data, 1)     # 类型1 x data (tensor), shape=(100, 1)
y1 = torch.ones(100)                # 类型1 y data (tensor), shape=(100, )

将两组数据进行融合,并用散点图表示出来,明显地看到可以将数据分为2类,即红绿各代表一类。
在这里插入图片描述

2. 神经网络模型的搭建和训练

神经网络模型的搭建和上一节回归问题基本一样,也是先搭建网络框架,再创建模型、优化器、损失函数。

要注意的是,在这个分类问题中我们输入的数据x是2维的,输出的预测值也是2维的(几分类问题输出就是几维),因此各个网络层的神经单元数要改变。

input_dim = 2
hidden_dim = 10
out_dim = 2

还有一点不同之处在于损失函数选用的是交叉熵(CrossEntropy) ,这是在做回归问题时常用的损失函数,而分类问题中最后一层的激活函数常选用的是softmax

有关交叉熵这有一篇博客介绍的很清晰,可以看一下。

pytorch中将两者集成在了torch.nn.CrossEntropyLoss() 这个函数中了,我们直接调用就好。

loss_func = nn.CrossEntropyLoss()

3. 结果展示

同样,我们输出训练过程中的loss值图像,发现损失值是在不断减小的,也就意味着模型拟合的越来越好。
在这里插入图片描述
要注意的是,这时给出的prediction并不是最后的分类值,而是一个Tensor数据格式,如[0.3,0.7],表示神经网络预测的样本属于每类的概率,所以需要取这个概率的最大值来表示最后的分类。

prediction = torch.max(F
  • 34
    点赞
  • 296
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
PyTorch是一个基于Python的科学计算库,可以用于实现深度学习模型。全连接前馈神经网络是一种最简单的人工神经元模型,可以用于解决回归或分类问题。 首先,我们需要导入PyTorch库和相关模块: ```python import torch import torch.nn as nn import torch.optim as optim ``` 然后,我们需要定义一个继承自`nn.Module`的神经网络类,并在构造函数中定义网络的结构。以回归问题为例,我们可以定义一个具有两个隐藏层和一个输出层的神经网络: ```python class RegressionNet(nn.Module): def __init__(self): super(RegressionNet, self).__init__() self.fc1 = nn.Linear(输入特征数, 隐藏层1神经元数) self.fc2 = nn.Linear(隐藏层1神经元数, 隐藏层2神经元数) self.fc3 = nn.Linear(隐藏层2神经元数, 输出神经元数) def forward(self, x): x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) x = self.fc3(x) return x ``` 接下来,我们需要实例化网络类,并定义损失函数和优化器: ```python model = RegressionNet() criterion = nn.MSELoss() # 均方误差损失函数 optimizer = optim.SGD(model.parameters(), lr=学习率) ``` 然后,我们需要准备训练数据和标签,并将其转换为`torch.Tensor`类型: ```python train_data = ... train_labels = ... train_data = torch.Tensor(train_data) train_labels = torch.Tensor(train_labels) ``` 接下来,我们可以开始训练模型。循环训练模型,每次迭代中进行前向传播、计算损失、更新参数: ```python for epoch in range(迭代次数): optimizer.zero_grad() # 清空梯度 output = model(train_data) # 前向传播 loss = criterion(output, train_labels) # 计算损失 loss.backward() # 反向传播计算梯度 optimizer.step() # 更新参数 ``` 最后,我们可以使用训练好的模型进行预测。首先将测试数据转换为`torch.Tensor`类型,然后使用已训练的模型进行预测: ```python test_data = ... test_data = torch.Tensor(test_data) predictions = model(test_data) # 预测 ``` 以上就是使用PyTorch实现全连接前馈神经网络进行回归或分类问题的基本步骤。我们可以根据具体的问题调整网络架构、损失函数和优化器等,以提高模型的性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值