python 人工智能,基础语法1
基础语法:
import numpy as np # 引入随机数库 npx1 = np.random.randint(0,100,(1000,1)) # 生产随机数,范围0-100,()括号里的意思是1000行,1列
npxy = np.concatenate((npx1,npx2,npx3,npx4,npy),axis=1) # 把他们连接成一个表格,concatenate 是连接表格的意思,axis是轴,1的意思是竖着连接起来。
import pandas as pd #读写excel的库,是一种数据类型 pdxy = pd.DataFrame(npxy,columns=['x1','x2','x3','x4','y']) #转换数据类型,改为pandas数据类型,便于写入excel,列名为x1,x2,x3,x4,y。 ### 在写入时,不能同时打开文件,否则报权限问题。 pdxy.to_excel('data.xlsx',index=False) # 写入excel,不要列上写数据,原版写进去。 pdxy.to_csv('data.csv',index=False) #写入csv, pdxyexcel = pd.read_excel('data.xlsx') # 读取excel
import torch #引入torch , #把数据读入到torch data = torch.tensor(pdxyexcel.values,dtype=torch.float) # xtrain=data[0:900,0:-1] #行从0行,到900行。列,从0列到-1(代表最后还剩下一列)即 x1,x2,x3,x4 ,剩下y列 ytrain=data[0:900,[-1]] # 最后一列 xtest=data[900:1000,0:-1] ytest=data[900:1000,[-1]]
from torch import nn,optim #定义网络 class Net(torch.nn.Module):#设计前项运算结果的网络 def __init__(self): super(Net, self).__init__() self.conv1 = nn.Sequential( nn.Linear(4,20), #开始输入的是4个x的值,入口为4 nn.ReLU(), nn.Linear(20,10), nn.ReLU(), nn.Linear(10, 5), nn.ReLU(), nn.Linear(5,1) ) def forward(self, x): x = self.conv1(x) return x
##定义一个运算设备,如果电脑有GPU就用GPU运算,如果没有就用CPU运算 device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') #把网络推到设备 model=Net().to(device) #定义损失函数类型,并且把它放到GPU上运行,MSELoss 是差的(不是比例的)损失函数 criteon=nn.MSELoss().to(device) #定义优化方式,梯度下降算法参数调整,lr为学习率 optimizer=optim.Adam(model.parameters(),lr=0.03) trainlosslist = [] # 定义在训练时,累计每个epoch的loss值存储数组 #训练 for epoch in range(200): #训练200次 model.train() #切换到训练模式 xtrain=xtrain.to(device) ytrain=ytrain.to(device) logits=model(xtrain) #得到预测值 loss = criteon(logits, ytrain) #通过损失函数的运算,得到差值 optimizer.zero_grad() # 清空w,b的导数 loss.backward() # 每次网络的W,B全部自动求导计算出导数,改怎么更新,他算出来了,他找到了。 optimizer.step() # 根据你定义的梯度下降规则来更新每层网络的W和b 这步开始更新,怎么加减 trainlosslist.append(loss.item()) # 把这一轮训练计算得出的loss值放入trainlosslist数组 model.eval() # 切换到测试模式 with torch.no_grad(): # 测试模式,不需要任何w,b的导数值 xtest = xtest.to(device) # 把测试x放到GPU上执行 ytest = ytest.to(device) # 把测试y放到GPU上执行 logits = model(xtest) # 通过网络模型的运算,得到预测值 testloss = criteon(logits, ytest) # 通过损失函数的运算,得到损失值 testlosslist.append(testloss.item()) # 把这一轮测试计算得出的loss值放入testlosslist数组 plt.cla() # 因为是动态图,所以先擦除上一张图 l1, = plt.plot(trainlosslist) # 把每一轮的训练loss值画出来 l2, = plt.plot(testlosslist) # 把每一轮的测试loss值画出来 plt.legend([l1, l2], ['tranloss', 'testloss'], loc='best') # 显示图例 plt.xlabel('epochs') # 画的图x轴,标注epochs字样 plt.pause(0.2) # 暂停0.2秒,以免画的太快感觉不到图在动 plt.ioff() # 结束动态图模式 plt.show() # 最终显示图片