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()  # 最终显示图片

 

posted @ 2022-03-11 11:53  琴声清幽  阅读(123)  评论(0编辑  收藏  举报