加密流量分类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 sqrt
    
    import torch
    import torch.nn as nn
    from models.base_model import BaseModel
    
    
    class 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,32
                nn.MaxPool2d(kernel_size=2), # b,32,16,16
                nn.Conv2d(kernel_size=5,in_channels=32,out_channels=64,stride=1,padding=2), # b,64,16,16
                nn.MaxPool2d(kernel_size=2), # b,64,8,8
            )
            # 全连接层
            self.classifier = nn.Sequential(
                # 29*64
                nn.Flatten(),
                nn.Linear(in_features=64 * 64, out_features=1024),  # 1024:64*64
                nn.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, None
    
        def 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_sta
    
    
    def cnn2d(model_path, pretrained=False, **kwargs):
        """
        CNN 1D model architecture
    
        Args:
            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 model
    
    
    def 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   support
    
              qq       1.00      1.00      1.00        90
              微信       1.00      1.00      1.00       206
              淘宝       1.00      1.00      1.00       108
    
        accuracy                           1.00       404
       macro 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.mfbz.cn/a/496629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造核心竞争力:高效Web系统数据中台的设计与实践_光点科技

在数字化的浪潮中,数据已经成为企业赖以生存和发展的核心资源。一个高效的Web系统数据中台,能够赋予企业在激烈的市场竞争中立于不败之地的能力。本文将深入探讨如何设计和实施一个能够提升企业数据管理水平和支持业务决策的高效数据中台架构。 数据中台…

基于Python实现多功能翻译助手(下)

为了将上述步骤中的功能增强与扩展具体化为代码,我们将实现翻译历史记录功能、翻译选项配置以及UI的改进。 翻译历史记录功能 import json # 假设有一个用于存储历史记录的json文件 HISTORY_FILE translation_history.json # 初始化历史记录列表 translati…

数组---

1、数组的定义 Java中,数组存储固定大小的同类型元素。 数组是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一的管理。 数组的特点: 数组本身是引用数据类型,但数组中的…

Spring使用(一)注解

Spring使用 资源 Spring 框架内部使用 Resource 接口作为所有资源的抽象和访问接口,在上一篇文章的示例代码中的配置文件是通过ClassPathResource 进行封装的,ClassPathResource 是 Resource 的一个特定类型的实现,代表的是位于 classpath …

vue3+Pinia的使用 - 封装

目录: persist.ts 可存储到本地 import { PersistedStateOptions } from "pinia-plugin-persistedstate";/*** description pinia 持久化参数配置* param {String} key 存储到持久化的 name* param {Array} paths 需要持久化的 state name* return per…

基于Transformer的医学图像分类研究

医学图像分类目前面临的挑战 医学图像分类需要研究人员同时具备医学图像分析和数字图像的知识背景。由于图像尺度、数据格式和数据类别分布的影响,现有的模型方法,如传统的机器学习的识别方法和基于深度卷积神经网络的方法,取得的识别准确度…

2024第六届环境科学与可再生能源国际会议能源 (ESRE 2024) 即将召开!

2024第六届环境科学与可再生能源国际会议 能源 (ESRE 2024) 即将举行 2024 年 6 月 28 日至 30 日在德国法兰克福举行。ESRE 2024 年 旨在为研究人员、从业人员和专业人士提供一个论坛 从工业界、学术界和政府到研究和 发展,环境科学领域的专…

Kubernetes 知识体系 系列一

多年前,大多数软件应用程序都是大型的单体,要么作为单个进程运行,要么作为少数服务器上的少量进程运行。这种过时的系统一直延续很久。 它们的发布周期较慢,更新相对较少。 在每个发布周期结束时,开发人员将整个系统…

算法第三十四天-有效数独

有效数独 题目要求 解题思路 一个简单的方法是,遍历9*9书读三次,以确保: 行中没有重复的数字列中没有重复的数字3*3子数独中没有重复的数字 但是,实际上,所有的一切都以可以在一次迭代中完成 可以使用box_index (r…

网约车APP小程序源码代驾顺风拼车货运司乘端安卓苹果源码可二开

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的,全开源未加密,这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍: 车主实名认证,驾驶证认证,车…

Python列表、元组、字典及集合

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、列表定义方式: 二、元组1、定义方式:2、元组中的物理存储地址不可修改,如果修改则会报错,但是元组中的列表、字典项等却可以…

代码随想录算法训练营第三十七天 | 738. 单调递增的数字、968. 监控二叉树

代码随想录算法训练营第三十七天 | 738. 单调递增的数字、968. 监控二叉树(待刷) 738. 单调递增的数字题目解法 968. 监控二叉树(待刷) 738. 单调递增的数字 题目 解法 class Solution { public:int monotoneIncreasingDigits(in…

File和IO流

1. File类常用方法 1.1 获取基本属性 • public String getName() :获取名称 • public String getPath() :获取路径 • public String getAbsolutePath():获取绝对路径 • public File getAbsoluteFile():获取绝对路径表示…

嵌入式培训3-28

编写一条学生链表&#xff0c;写一些能够像链表里边添加数据的函数 实现&#xff1a;将链表中的所有内容保存到文件中去 以及 读取文件中的所有内容&#xff0c;加载到链表里面 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ma…

AD学习笔记

1. EOS 选择中心点 2. PDL 标记距离 3. 选择线框&#xff0c;按DSD重新定义板框 4. su框选&#xff0c;sl线选 5. mx x/y轴移动 6. dk 打开层叠管理器 7. shifts单层显示 8. 单端引脚不报错&#xff0c;CO工程选项下关闭报错即可。 9. PCB界面中寻找元件&#xff1a;…

蓝桥杯 - 小明的背包3(多重背包)

解题思路&#xff1a; 动态规划 多重背包问题需要在01背包问题&#xff08;不重复&#xff09;的基础上多加一层循环进行遍历&#xff0c;并且dp[ j ]的式子也需要修改 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan …

【JavaSE】网络编程

定义&#xff1a;在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输 常见的软件架构&#xff1a; C/S&#xff1a;Client/Server&#xff08;客户端/服务器&#xff09; 在用户本地需要下载并安装客户端程序 画面可以很精美&#xff0c;用户体…

【面试经典 | 150】单词拆分

文章目录 Tag题目来源解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【字符串】 题目来源 139. 单词拆分 解题思路 方法一&#xff1a;动态规划 定义状态 定义 dp[i] 表示字符串 s 前 i 个字符组成的字符串&#xff08;s[0, ..., i-1]&#xff09;是否能被…

7.JDK下载和安装

文章目录 一、下载二、安装三、JDK的安装目录介绍 写JAVA代码不是随随便便能写的&#xff0c;我们得先做一点准备工作。例如&#xff0c;我们平时想要玩一把游戏&#xff0c;就需要先下载、安装才能玩游戏。JAVA也是一样的&#xff0c;也是需要下载并安装相关的软件&#xff0c…

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

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