KDDCup深度学习
Posted lisyr44
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KDDCup深度学习相关的知识,希望对你有一定的参考价值。
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()
深度学习入门好文,强烈推荐! ! !
学习目标
- 知道什么是深度学习
- 知道深度学习和机器学习的区别
- 能够说出深度学习的主要应用场景
- 知道深度学习的常见框架
1. 深度学习的概念
深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行特征学习的算法。
2. 机器学习和深度学习的区别
2.1 区别1 :特征提取
从特征提取的角度出发:
- 机器学习需要有人工的特征提取的过程
- 深度学习没有复杂的人工特征提取的过程,特征提取的过程可以通过深度神经网络自动完成
2.2 区别2:数据量
从数据量的角度出发:
- 深度学习需要大量的训练数据集,会有更高的效果
- 深度学习训练深度神经网络需要大量的算力,因为其中有更多的参数
3. 深度学习的应用场景
-
图像识别
- 物体识别
- 场景识别
- 人脸检测跟踪
- 人脸身份认证
-
自然语言处理技术
- 机器翻译
- 文本识别
- 聊天对话
-
语音技术
- 语音识别
4. 常见的深度学习框架
目前企业中常见的深度学习框架有很多,TensorFlow, Caffe2, Keras, Theano, PyTorch, Chainer, DyNet, MXNet, and CNTK等等
其中Tensorflow和Kears是google出品的,使用者很多,但是其语法晦涩而且和python的语法不尽相同,对于入门玩家而言上手难度较高。
所以在之后的课程中我们会使用Facebook出的PyTorch,PyTorch的使用和python的语法相同,整个操作类似Numpy的操作,并且 PyTorch 使用的是动态计算,会让代码的调试变的更加简单
的使用和python的语法相同,整个操作类似Numpy的操作,并且 PyTorch 使用的是动态计算,会让代码的调试变的更加简单.
加油!
感谢!
努力!
以上是关于KDDCup深度学习的主要内容,如果未能解决你的问题,请参考以下文章