当前位置:   article > 正文

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, )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

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

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

input_dim = 2
hidden_dim = 10
out_dim = 2
  • 1
  • 2
  • 3

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

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

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

loss_func = nn.CrossEntropyLoss()
  • 1

3. 结果展示

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

prediction = torch.max(F
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/235354?site
    推荐阅读
    相关标签
      

    闽ICP备14008679号