首页 > 其他分享 >KDDCup深度学习

KDDCup深度学习

时间:2023-05-16 23:55:51浏览次数:36  
标签:acc loss KDDCup 学习 train 深度 test label data

import pandas as pd
import torch
import torchvision
import torch.nn as nn
import numpy as np
import torch.utils.data as Data
from sklearn import preprocessing
import matplotlib.pyplot as plt

epochs = 20
batch_size = 64
lr = 0.001

# 我直接将官网的格式改成了csv文件
train_data = pd.read_csv('./data/train_10_percent.csv', header=None)
test_data = pd.read_csv('./data/test.csv', header=None)
# 分类任务,将测试集中多余的17种类别去掉
test_data = test_data[test_data[41].isin(set(train_data[41]))]
data = pd.concat((train_data, test_data), ignore_index=True)

# 特征和标签编码,删去了19列
le = preprocessing.LabelEncoder()
# 特征值编码
data[1] = le.fit_transform(data[1])
data[2] = le.fit_transform(data[2])
data[3] = le.fit_transform(data[3])
# 将normal.标签设置为1, 非normal.标签设置为0
data.loc[data[41] != 'normal.', 41] = 0
data.loc[data[41] == 'normal.', 41] = 1
data[41] = data[41].astype('int64')

# 第19列的特征全为0,无用,删掉
del data[19]
data.columns = list(range(41))

# 对特征值归一化
for i in range(40):
    Max, Min = max(data.loc[:, i]), min(data.loc[:, i])
    data.loc[:, i] = ((data.loc[:, i] - Min) / (Max - Min)).astype('float32')

# 制作pytorch识别的数据集和定义模型
train_data, train_label = torch.Tensor(data.loc[:494021, :39].values), torch.Tensor(data.loc[:494021, 40].values).long()
test_data, test_label = torch.Tensor(data.loc[494021:, :39, ].values), torch.Tensor(data.loc[494021:, 40].values).long()

train_dataset = Data.TensorDataset(train_data, train_label)
test_dataset = Data.TensorDataset(test_data, test_label)

# 制作Dataloder数据集,可迭代
train_loader = Data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = Data.DataLoader(test_dataset, batch_size=128)

# 如果是用gpu,就用gpu训练
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# 定义模型
num_inputs, num_hiddens, num_outputs = 40, 128, 23
net = nn.Sequential(
    nn.Linear(num_inputs, num_hiddens),
    nn.ReLU(),
    nn.Linear(num_hiddens, 2 * num_hiddens),
    nn.ReLU(),
    nn.Linear(2 * num_hiddens, num_outputs)
)
net.to(device)
# 定义损失函数
loss = torch.nn.CrossEntropyLoss()
# 定义优化器
optimizer = torch.optim.Adam(net.parameters(), lr=lr)


# 训练
def train():
    net.train()
    batch_loss, correct, total = 0.0, 0.0, 0.0
    for data, label in train_loader:
        data, label = data.to(device), label.to(device)
        net.zero_grad()
        output = net(data)
        l = loss(output, label)
        l.backward()
        optimizer.step()

        predict_label = torch.argmax(output, dim=1)
        correct += torch.sum(predict_label == label).cpu().item()
        total += len(label)
        batch_loss += l.cpu().item()

    return correct / total, batch_loss / len(train_loader)


# 绘图
def pltfigure(x, y, title, id, data):
    plt.subplot(2, 2, id)
    plt.plot(range(len(data)), data)
    plt.xlabel(x)
    plt.ylabel(y)
    plt.title(title)
    plt.show()


# 测试
def test():
    net.eval()
    batch_loss, correct, total = 0.0, 0.0, 0.0
    for data, label in test_loader:
        data, label = data.to(device), label.to(device)

        output = net(data)
        batch_loss += loss(output, label).cpu().item()
        predict_label = torch.argmax(output, dim=1)
        correct += torch.sum(predict_label == label).cpu().item()
        total += len(label)

    return correct / total, batch_loss / len(test_loader)


# 主程序
def main():
    print('training on: ', device)
    print('batch_size:', batch_size)
    print('epochs:', epochs)
    print('learning_rate:', lr)
    plt.figure()

    train_acc_list, train_loss_list, test_acc_list, test_loss_list = [], [], [], []
    for epoch in range(epochs):
        train_acc, train_loss = train()
        test_acc, test_loss = test()

        print('epoch %d:  train acc: %.2f%% train loss:%.4f,  test acc: %.2f%%, test loss:%.4f'
              % (epoch, 100 * train_acc, train_loss, 100 * test_acc, test_loss))

        train_acc_list.append(train_acc)
        train_loss_list.append(train_loss)
        test_acc_list.append(test_acc)
        test_loss_list.append(test_loss)


    #绘图
    pltfigure(x='epoch', y='acc',  title='epoch-train_acc', id=1, data=train_acc_list)
    pltfigure(x='epoch', y='loss', title='epoch-train_loss',id=2, data= train_loss_list)
    pltfigure(x='epoch', y='acc',  title='epoch-test_acc',  id=3, data=test_acc_list)
    pltfigure(x='epoch', y='loss', title='epoch-test_loss', id=4, data=test_loss_list)

main()

标签:acc,loss,KDDCup,学习,train,深度,test,label,data
From: https://www.cnblogs.com/lisyr44/p/17407252.html

相关文章

  • mycat-学习
    1.下载地址:https://github.com/MyCATApache/Mycat-Server  2.大部分的安装和原理讲解已经很成熟了.这里也不再抄了,可参考:https://blog.51cto.com/u_15780455/6245373[linux安装]  window本地进行使用的时候,可以直接下载工程然后再idea中进行配置调试.也方便学习和试......
  • 十步学习法,赋能程序员
    引言最近看了《软技能:代码之外的生存指南》这本书,对其中的"十步学习法"。有一些感触,所以将其中的内容记录并总结了下来,分享给大家。程序员在学习成长的过程中,除了关注技术的发展。同时也应该要学习一些软技能,用于提升自己的认知及格局。十步学习法01了解全局了解全局就......
  • Python学习之十三_pip的学习
    Python学习之十三_pip的学习pip的含义pip:pipisthepackageinstallerforPython.YoucanusepiptoinstallpackagesfromthePythonPackageIndexandotherindexes.pip其实就是python的包管理器:PackagesInstallforPython他可以在线安装也可以离线安装......
  • 基于大模型的优质Prompt开发课--学习笔记ing
    大规模与训练语言模型(LLMs) Large-scaleandtrainedlanguagemodel 近十年深度学习模型主要更迭 当模型能够习得的知识量级越来越大,其生成的内容亦呈现出无线可能 为什么大模型能够如此强大的表现力大模型(LLMs)涌现出的三大能力:上下文学习(In-cotnextlearning)上下......
  • 智能排班系统--今日学习总结
    今天我完成了android端连接mysql并且实现增、删、改、查的每个操作,为实现web端和android端的信息互通奠定了基础,在此基础上,能够实现员工安卓端向web管理端的请假信息的传递。明天我要在安卓端实现信息通知推送功能,能够及时提示员工请假的过程以及结果。packagecom.example.pai......
  • TM1652入门学习手册
    TM1652入门学习手册1.TM1650概述​ TM1652是一款LED(发光二极管、数码管、点阵屏)驱动控制专用芯片,内部集成了数字通讯电路、解码电路、数据锁存器、震荡器、LED驱动电路。通讯方式采用异步串口通信(UART)协议,因芯片只接收单片机发来的数据,仅需要单片机的一个TX端口发送数据给芯......
  • 基于FATE联邦学习的隐私计算实践
    FATE 是一个工业级联邦学习框架,所谓联邦学习指的就是可以联合多方的数据,共同构建一个模型;与传统数据使用方式相比,它不需要聚合各方数据搭建 数据仓库,联邦学习在联合计算建模的过程中,多方机构之间的数据是不会进行共享的,实现数据的 可用不可见。本文主要分享隐私计算平台 FATE......
  • 计算机网络学习笔记之数据链路层的介质访问控制
    计算机网络学习笔记之数据链路层的介质访问控制介质访问控制信道划分介质访问控制随机访问介质访问控制ALOHA协议(不听就说)纯ALOHA协议时隙ALOHA协议比较CSMA协议(先听再说)坚持CSMA非坚持CSMAp-坚持CSMA比较CSMA/CD协议(先听再说,边听边说)......
  • C++学习简记Ⅱ
    二C++数组Array可以在堆(heap)上创建一个数组int*another=newint[5];//其作用域与在栈上创建不同,直到程序把它销毁之前,它都是处于活动状态的,需要用delete关键字来删除delete[]another;使用new动态分配最大的原因是生存期,用new来分配的内存,它将一直存在,直到手动删......
  • C++学习简记Ⅰ
    一指针内容在C中已经熟悉指针本身为一个代表地址的整数指针的*运算符通常被称为dereference运算符,可逆引用指针。引用引用必须引用已经存在的变量,其本身不是变量也不占用内存,相当于变量的别名使用int&类此的形式声明引用变量其作用为向函数传递变量,而不是只传递值,这使......