600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Iris数据集神经网络训练

Iris数据集神经网络训练

时间:2020-02-17 02:32:15

相关推荐

Iris数据集神经网络训练

Iris数据集神经网络训练

Iris数据集简介

Iris数据集中简单来说有四个输入量(四种花的性状),一个输出量(花的种类),神经网络的作用其实就是通过数据集训练来预测未被训练的数据的输出

import csv,pandas as pdimport torchimport numpy as npimport torch.nn as nnimport torch.nn.functional as Fimport matplotlib.pyplot as pltfrom torch.autograd import Variableinput,output = [],[]#输入输出分别对应列表with open('Iris数据集下载之后的绝对路径')as(f): f_csv=csv.reader(f)headers=next(f_csv)for row in f_csv:input.append([row[1],row[2],row[3],row[4]])#4维张量output.append([row[5]])#单输出#读入CSV文件中的数据input = np.asarray(input,dtype=np.float32)input = torch.from_numpy(input)output = np.asarray(output,dtype=np.float32)output = torch.from_numpy(output)#数据类型转换为tensorx = torch.unsqueeze(input,dim=1)y = torch.unsqueeze(output,dim=1)x,y =(Variable(x),Variable(y))print(y)#扩充维度class Net(nn.Module):def __init__(self,n_input,n_hidden,n_output):super(Net,self).__init__()self.hidden1 = nn.Linear(n_input,n_hidden)self.hidden2 = nn.Linear(n_hidden,n_hidden)self.predict = nn.Linear(n_hidden,n_output)#Module类构造函数初始化,两层隐藏层,输入输出def forward(self,input):out = self.hidden1(input)out = F.relu(out)out = self.hidden2(out)out = F.sigmoid(out)out = self.predict(out)return out#前馈函数第一层使用ReLu函数,第二层使用sigmoid函数net = Net(4,20,1)print(net)#输入层四个变量,中间层20,输出层一个输出optimizer = torch.optim.SGD(net.parameters(),lr = 0.2)loss_func = torch.nn.MSELoss()#残差,即损失函数for t in range(100000):prediction = net(x)loss = loss_func(prediction, y)optimizer.zero_grad()loss.backward()optimizer.step()if t%5 ==0:print('Loss = %.4f' % loss.data)z=[[5.1,3.8,1.9,0.4]]z = np.asarray(z,dtype=np.float32)z = torch.from_numpy(z)z = torch.unsqueeze(z,dim=1)z=(Variable(z))pre = net(z)print("pre=",pre)z=[[5.7,2.8,4.1,1.3]]z = np.asarray(z,dtype=np.float32)z = torch.from_numpy(z)z = torch.unsqueeze(z,dim=1)z = (Variable(z))pre = net(z)print("pre=",pre)z=[[6.2,3.4,5.4,2.3]]z = np.asarray(z,dtype=np.float32)z = torch.from_numpy(z)z = torch.unsqueeze(z,dim=1)z = (Variable(z))pre = net(z)print("pre=",pre)#因为Iris数据集总共150组数据,程序采用120组数据训练神经网络,最后使用剩下三十组数据进行预测,花的种类直接用0,1,2表示

首先在网上下载Iris数据集,查找下载后在你电脑上的绝对路径,python的读入文件要用(我是先把Iris的csv文件最后的花种类全部改成了数字,不然会报错),初始化的时候将input和output都初始化成列表,通过读入的数据集录入数据,input直接读入四种数据因为构建Iris数据集对应的神经网络是一个多输入(四输入)单输出的结构,将input和output张量(tensor)化

下来就是神经网络的构建,Net类继承Module类,构造函数两层隐藏层,前馈函数第一层使用ReLu函数,第二层使用sigmoid函数

类的实例化参数为(4,20,1),即为矩阵相乘的法则,四输入单输出,中间层20

损失函数采用pytorch自带的函数

循环10w遍,每隔5次计算当前的损失函数并输出

最后直接使用未参与训练的数据进行预测,因为数据集中只有150组数据,我是将其中120组抽出来进行训练,剩下30组抽出三组进行预测,pre输出的数0,1,2分别代表花的种类(输出的都是浮点数,可以直接用python的数学函数四舍五入就能得到0,1,2)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。