• 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()  # 最终显示图片
  • 相关阅读:
    2018-2019-2 20175310 个人项目总结报告
    2018-2019-2 20175310 个人项目报告5--勾股数
    2018-2019-2 20175310 个人项目报告6--四方定理
    2018-2019-2 20175310 个人项目报告7--尼科彻斯定理
    #2019-2020-4 《Java 程序设计》第十周总结
    数据库MySQL(20175229张智敏)
    #实验三 敏捷开发与XP实践---实验报告
    课下必做MyCP
    #2019-2020-4 《Java 程序设计》第九周总结
    #2019-2020-4 《Java 程序设计》第八周总结
  • 原文地址:https://www.cnblogs.com/sdgtxuyong/p/15993145.html
Copyright © 2020-2023  润新知