加密流量分类torch实践5:TrafficClassificationPandemonium项目更新3

加密流量分类torch实践5:TrafficClassificationPandemonium项目更新3

更新日志

代码已经推送开源至露露云的github,如果能帮助你,就给鼠鼠点一个star吧!!!

  我的CSDN博客

  我的Github Page博客

3/23日更新(此部分上节已经介绍)

  当前更新对运行项目是无影响的,也就是说如果你是仅仅使用项目而不进行扩展的话,此处更新是透明的,对当前仓库版本的代码可以不进行同步。
  代码已经推送开源至露露云的github,如果能帮助你,就给鼠鼠点一个star吧!!!

模型结构更新

简要由原先各个模型独立抽象出了一个base_model模型基类,由该基类继承nn.Module类,定义抽象方法forwarddata_trans,方便不同模型进行各自的数据变换

  1. 为什么要改?

    dataloader给模型输入的数据格式是固定死的,给每一个模型设定不同的dataloader违背了项目多个模型统一代码原则,而不同模型对于数据的输入样式是不同的,为了适用于之后会加入项目的模型,抽象出一个基类,设定一个data_trans抽象方法,每一个模型都根据模型的输入去实现该方法即可,这样做到了不更改dataloader的目的,做到代码复用

  2. dataloader给定的数据样式?

    分析日志可以给出以下各个维度下dataloader给定的数据shape

    [2024-03-23 17:19:38,802 INFO] 是否使用 GPU 进行训练, cuda
    [2024-03-23 17:19:44,781 INFO] 成功初始化模型.
    [2024-03-23 17:19:44,814 INFO] pcap 文件大小, torch.Size([404, 1, 1024]); seq文件大小:torch.Size([404, 128, 1]); sta文件大小: torch.Size([404, 1024]); label 文件大小: torch.Size([404])
    [2024-03-23 17:19:44,851 INFO] pcap 文件大小, torch.Size([404, 1, 1024]); seq文件大小:torch.Size([404, 128, 1]); sta文件大小: torch.Size([404, 1024]); label 文件大小: torch.Size([404])
    [2024-03-23 17:19:44,851 INFO] 成功加载数据集.
    

    负载pay: [batch_size,1,m*n]

    包长seq: [batch_size,seq_len,1]

    统计sta: [batch_size,sta_len]

    • m*n是预处理的前m个包的前n个字节,这里目前写的是4*256也就是1024
    • seq_len是预处理的前ip_length个包长,这里目前是128
    • sta_len是预处理的统计维度,在10号更新的数据下是26

3/28日更新

增加模型二维卷积神经网络CNN2d

  1. 由于前期中的使用继承改善了模型结构,这里只需要写一个py文件就可以了

    """
    @Description: 二维卷积神经网络
    """
    from math import sqrtimport torch
    import torch.nn as nn
    from models.base_model import BaseModelclass Cnn2d(BaseModel):def __init__(self, num_classes=12):super(Cnn2d, self).__init__()# 卷积层+池化层self.features = nn.Sequential(nn.Conv2d(kernel_size=5,in_channels=1,out_channels=32,stride=1,padding=2), # b,32,32,32nn.MaxPool2d(kernel_size=2), # b,32,16,16nn.Conv2d(kernel_size=5,in_channels=32,out_channels=64,stride=1,padding=2), # b,64,16,16nn.MaxPool2d(kernel_size=2), # b,64,8,8)# 全连接层self.classifier = nn.Sequential(# 29*64nn.Flatten(),nn.Linear(in_features=64 * 64, out_features=1024),  # 1024:64*64nn.Dropout(0.5),nn.Linear(in_features=1024, out_features=num_classes))def forward(self, pay, seq, sta):pay, seq, sta = self.data_trans(pay, seq, sta)pay = self.features(pay)  # 卷积层, 提取特征pay = self.classifier(pay)  # 分类层, 用来分类return pay, Nonedef data_trans(self, x_payload, x_sequence, x_sta):# 转换x_0,x_1,x_2 = x_payload.shape[0],x_payload.shape[1],x_payload.shape[2]x_payload = x_payload.reshape(x_0,x_1,int(sqrt(x_2)),int(sqrt(x_2)))return x_payload, x_sequence, x_stadef cnn2d(model_path, pretrained=False, **kwargs):"""CNN 1D model architectureArgs:pretrained (bool): if True, returns a model pre-trained model"""model = Cnn2d(**kwargs)if pretrained:checkpoint = torch.load(model_path)model.load_state_dict(checkpoint['state_dict'])return modeldef main():a = sqrt(1024)x_pay = torch.rand(8,1,1024)cnn = Cnn2d()x = cnn(x_pay,x_pay,x_pay)if __name__=="__main__":main()
    

    模型结构:

    两个卷积+池化的组合,卷积核大小都是5X5,池化层的核大小都是2X2

  2. train_test_model.py中,改动

    from utils.set_config import setup_config
    # from models.cnn1d import cnn1d as train_model
    # from models.app_net import app_net as train_model
    from models.cnn2d import cnn2d as train_model
    

    image-20240328212456471

即可!

  1. 开始训练!

    [2024-03-28 21:20:53,317 INFO] Epoch: [47][2/4], Loss 0.0001 (0.0005), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:53,345 INFO] Epoch: [47][3/4], Loss 0.0000 (0.0005), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:53,544 INFO]  * Prec@1 100.000
    [2024-03-28 21:20:53,716 INFO] Epoch: [48][1/4], Loss 0.0001 (0.0002), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:53,723 INFO] Epoch: [48][3/4], Loss 0.0000 (0.0003), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,066 INFO] Epoch: [48][0/4], Loss 0.0000 (0.0000), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,105 INFO] Epoch: [48][1/4], Loss 0.0014 (0.0007), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,146 INFO] Epoch: [48][2/4], Loss 0.0001 (0.0005), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,153 INFO] Epoch: [48][3/4], Loss 0.0000 (0.0005), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,331 INFO]  * Prec@1 100.000
    [2024-03-28 21:20:54,537 INFO] Epoch: [49][1/4], Loss 0.0080 (0.0055), Prec@1 99.219 (99.609)
    [2024-03-28 21:20:54,558 INFO] Epoch: [49][3/4], Loss 0.0000 (0.0058), Prec@1 100.000 (99.505)
    [2024-03-28 21:20:54,880 INFO] Epoch: [49][0/4], Loss 0.0000 (0.0000), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,929 INFO] Epoch: [49][1/4], Loss 0.0001 (0.0001), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,970 INFO] Epoch: [49][2/4], Loss 0.0013 (0.0005), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:54,982 INFO] Epoch: [49][3/4], Loss 0.0000 (0.0005), Prec@1 100.000 (100.000)
    [2024-03-28 21:20:55,147 INFO]  * Prec@1 100.000
    
  2. 修改测试文件相应的配置项,并且切换为测试模式

    Model Classification report:
    [2024-03-28 21:26:19,166 INFO] ------------------------------
    [2024-03-28 21:26:19,172 INFO]               precision    recall  f1-score   supportqq       1.00      1.00      1.00        90微信       1.00      1.00      1.00       206淘宝       1.00      1.00      1.00       108accuracy                           1.00       404macro avg       1.00      1.00      1.00       404
    weighted avg       1.00      1.00      1.00       404[2024-03-28 21:26:19,175 INFO] 
    Prediction Confusion Matrix:
    [2024-03-28 21:26:19,175 INFO] ------------------------------
    [2024-03-28 21:26:19,845 INFO]            Predicted:          qq   微信   淘宝
    Actual: qq         90    0    0微信          0  206    0淘宝          0    0  108
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式学习笔记 - 设计模式与范式 -结构型:7.享元模式(上):享元模式原理和应用

概述 在《设计模式与范式 -结构型:6.组合模式》,讲了组合模式。组合模式并不常用,主要用在数据能表示成树形结构、能通过遍历算法来解决问题的场景中。本章再学习一个不那么常用的模式,享元模式(Flyweight Design Pat…

iOS - Runtime-API

文章目录 iOS - Runtime-API1. Runtime应用1.1 字典转模型1.2 替换方法实现1.3 利用关联对象给分类添加属性1.4 利用消息转发机制,解决方法找不到的异常问题 2. Runtime-API2.1 Runtime API01 – 类2.1.1 动态创建一个类(参数:父类&#xff0…

【Pt】马灯贴图绘制过程 02-制作锈迹

目录 一、边缘磨损效果 二、刮痕效果 三、边缘磨损与刮痕的混合 四、锈迹效果 本篇效果: 一、边缘磨损效果 将智能材质“Iron Forge Old” 拖入图层 打开“Iron Forge Old” 文件夹,选中“Sharpen”(锐化),增大“…

2010-2021年银行网点及员工信息数据

2010-2021年银行网点及员工信息数据 1、时间:2010-2021年 2、来源:整理自csmar 3、指标:银行代码、股票代码、银行中文简称、统计截止日期、分行数量、机构网点数量、其中:境内网点数量、其中:境外网点数量、在职员…

Linux集群

目录 一、什么是集群? 二、 搭建(tomcatnginxkeepalived)集群 一、JDK安装 二、Tomcat安装 三、Nginx 3.1、什么是Nginx? 3.2、下载Nginx 3.3、安装 四、搭建NginxTomcat的实现集群 配置nginx.comf文件 五:Nginx搭建图片服务器 …

组件上使用 v-for

我们可以直接在组件上使用 v-for&#xff0c;和在一般的元素上使用没有区别 (别忘记提供一个 key)&#xff1a; <MyComponent v-for"item in items" :key"item.id" /> 但是&#xff0c;这不会自动将任何数据传递给组件&#xff0c;因为组件有自己独…

openGauss CM

CM 可获得性 本特性自openGauss 3.0.0版本开始引入。 特性简介 CM&#xff08;Cluster Manager&#xff09;是一款数据库管理软件&#xff0c;由cm_server和cm_agent组成。 cm_agent是部署在数据库每个主机上&#xff0c;用来启停和监控各个数据库实例进程的数据库管理组件…

【Java程序设计】【C00392】基于(JavaWeb)Springboot的校园生活服务平台(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的校园生活服务平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过…

C#面:程序集的主版本号和次版本号

C# 程序集的版本号和次版本号是程序集的一部分&#xff0c;用于标识程序集的不同版本。版本号通常由四个部分组成&#xff1a;主版本号、次版本号、生成号和修订号。其中&#xff0c;主版本号和次版本号是最常用的两个部分。 主版本号&#xff08;Major Version&#xff09;&a…

VUE 实现文件夹上传(保留目录结构)

代码&#xff1a;https://gitee.com/xproer/up6-vue-cli 1.引入up6组件 2.配置接口地址 接口地址分别对应&#xff1a;文件初始化&#xff0c;文件数据上传&#xff0c;文件进度&#xff0c;文件上传完毕&#xff0c;文件删除&#xff0c;文件夹初始化&#xff0c;文件夹删除&…

2024年做视频号小店是不是明智之举?这篇文章告诉你答案

大家好&#xff0c;我是电商糖果 视频号自从去年电商的知名度打开之后&#xff0c;不少朋友都盯上这块肥肉。 要知道现在可是短视频电商的时代&#xff0c;抖音&#xff0c;快手靠做电商赚了不少钱。 视频号又怎么会放过这次的风口呢&#xff1f; 也有不少想做电商的朋友问…

灯哥驱动器端口讲解----foc电机驱动必看

CS:是电流采样的引脚&#xff0c;三项采样电流&#xff0c;现在只给了两路&#xff0c;另外一路算出来就行了 in:三项电流输入&#xff0c;驱动电机使用。 en:没有用 SDA,SCL&#xff1a;I2C的引脚用来读取编码器的计数值 tx,rx&#xff1a;引出来了一路串口&#xff0c;没有用…

西安 专业nft开发NFT寄售-NFT抢购-NFT盲盒-NFT空投

在数字化时代的今天&#xff0c;非同质化代币&#xff08;NFT&#xff09;正成为数字资产领域的新宠。作为区块链技术的一种应用&#xff0c;NFT 赋予数字资产独一无二的身份和价值&#xff0c;从而在艺术、游戏、音乐、收藏品等领域掀起了一股热潮。西安&#xff0c;这座千年古…

LeetCode-热题100:42. 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a; height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a; 6 解释&#xff1a; 上面是由数组 [0,1,0,2,1,…

java 设计模式详解(持续更新)

单例模式 观察者模式 装饰者模式 适配器模式 工厂模式 代理模式 单例模式 简单点说&#xff0c;就是一个应用程序中&#xff0c;某个类的实例对象只有一个&#xff0c;你没办法去new&#xff0c;因为构造器是被private修饰的&#xff0c;一般通过getInstance()的方法来获取…

2024社工考试报名详细流程来啦✅

2024社工考试报名详细流程来啦✅ ⏰社工报名时间&#xff1a;4月1日-4月18日 &#x1f447;&#x1f3fb;2024年社工报名流程 1、打开人事考试网&#xff0c;点击左侧【网上报名】 2、没有用户名的点击新用户注册&#xff0c;有用户名的直接输入用户名密码登录即可。 3、注册好…

Day26 HashMap

Day26 HashMap 文章目录 Day26 HashMap一、应用场景二、特点三、基本用法四、面试题 一、应用场景 1、概念&#xff1a; HashMap是Java集合框架中的一种实现类&#xff0c;用于存储键值对。 2、好处&#xff1a; HashMap是一个常用的集合类&#xff0c;适用于需要快速查找和插…

24计算机考研调剂 | 【官方】北京科技大学

北京科技大学 考研调剂招生信息 招生专业&#xff1a; 085404&#xff08;计算机技术&#xff09; 081200&#xff08;计算机科学与技术&#xff09; 调剂要求&#xff1a;&#xff08;调剂基本分数&#xff09; 我中心将在教育部“全国硕士生招生调剂服务系统”&#xff08…

postgres12.4安装pg_rman-1.3.16

操作系统版本&#xff1a;centos7.6 X64 pg_rman版本&#xff1a;pg_rman-1.3.16-pg12.tar.gz postgres版本&#xff1a;postgresql-12.4.tar.gz 备份文件存放路径&#xff1a;/home/postgres/backup 归档日志存放路径&#xff1a;/home/postgres/archivelog/ postgres用户的环…

It takes two (搜索)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 3 4 AAAO AAAA AAAA 输出 NO 思路&#xff1a; 根据题目意思&#xff0c;如果存在的 A 联通不可以成为 矩形&#xff0c;输出 NO&#xff0c;否则输出 YES 这道题看数据范…