在传统机器学习中,要实现分类算法,一般可采用KNN或者KMeans等方法实现,但以上两种方法,都会有K取值不同,分类结果的问题。而在深度学习中,跟线性回归一样,也可以使用简单粗暴的方式,解决分类问题。以下介绍使用 Pytorch 通过深度学习的方法,实现分类算法。
代码示例
1、生成随机数据集
from matplotlib import pyplot as plt from sklearn.datasets._samples_generator import make_blobs x, y = make_blobs(200, 2, centers=[[2, 3], [6, 8]]) plt.scatter(x[:, 0], x[:, 1]) plt.show()
2、建立神经网络
import torch import torch.nn as nn class CModule(nn.Module): def __init__(self): super().__init__() self.linear1 = nn.Linear(2, 32) self.relu = nn.ReLU() self.linear2 = nn.Linear(32, 4) def forward(self, x): x = self.linear1(x) x = self.relu(x) x = self.linear2(x) return x cmodule = CModule() print(cmodule)
output:
CModule( (linear1): Linear(in_features=2, out_features=32, bias=True) (relu): ReLU() (linear2): Linear(in_features=32, out_features=4, bias=True) )
3、模型训练
x, y = make_blobs(200, 2, centers=4) x = torch.FloatTensor(x) y = torch.tensor(y) # 优化器 optimizer = torch.optim.Adam(cmodule.parameters(), lr=0.02) # 损失函数 loss_fn = torch.nn.CrossEntropyLoss() for i in range(1000): p_y = cmodule(x) loss = loss_fn(p_y, y) optimizer.zero_grad() loss.backward() optimizer.step()
4、可视化预测结果
ax = plt.axes() plt.ion() plt.show() for i in range(1000): ...... # 准确率 p_y = torch.argmax(p_y, 1).data.numpy() accuracy = (p_y == y.data.numpy()).sum() / y.size()[0] plt.cla() plt.scatter(x[:, 0], x[:, 1], c=p_y) plt.text(0.75, 0.05 , 'accuracy:' + str(accuracy), transform=ax.transAxes) plt.pause(0.3)
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/243