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.softmax(out), 1)[1
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值