导入库
import numpy as np
import torch
from collections import Counter
from sklearn import datasets
import torch.nn.functional as Fun
1. 数据准备
dataset = datasets.load_iris()
dataut=dataset['data']
priciple=dataset['target']
input=torch.FloatTensor(dataset['data'])
label=torch.LongTensor(dataset['target'])
2. 定义BP神经网络
class Net(torch.nn.Module):
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, n_hidden)
self.out = torch.nn.Linear(n_hidden, n_output)
def forward(self, x):
x = Fun.relu(self.hidden(x))
x = self.out(x)
return x
3. 定义优化器损失函数
net = Net(n_feature=4, n_hidden=20, n_output=3)
optimizer = torch.optim.SGD(net.parameters(), lr=0.02) # 优化器选用随机梯度下降方式
loss_func = torch.nn.CrossEntropyLoss() # 对于多分类一般采用的交叉熵损失函数,
4. 训练数据
for t in range(500):
out = net(input)
loss = loss_func(out, label)
optimizer.zero_grad() # 梯度清零
loss.backward() # 前馈操作
optimizer.step() # 使用梯度优化器
5. 得出结果
out = net(input)
prediction = torch.max(out, 1)[1]
pred_y = prediction.data.numpy()
target_y = label.data.numpy()
6.衡量准确率
accuracy = float((pred_y == target_y).astype(int).sum()) / float(target_y.size)
print("莺尾花预测准确率",accuracy)