Level protection and deep learning

1.模拟生成的数据

import randomdef generate_data(level, num_samples):if level not in [2, 3, 4]:return Nonedata_list = []for _ in range(num_samples):# 构建指定等级的数据data = str(level)for _ in range(321):data += str(random.randint(0, 9))data_list.append(data)return data_listdef save_data_to_txt(data, filename):with open(filename, 'a') as f:for item in data:f.write("%s\n" % item)print(f"Data saved to {filename}")# 创建一个文件用于存储所有数据
output_filename = "combined_data.txt"# 生成等级为2的一万条数据,并保存到文件
level_2_data = generate_data(2, 100)
save_data_to_txt(level_2_data, output_filename)# 生成等级为3的一万条数据,并保存到文件
level_3_data = generate_data(3, 100)
save_data_to_txt(level_3_data, output_filename)# 生成等级为4的一万条数据,并保存到文件
level_4_data = generate_data(4, 100)
save_data_to_txt(level_4_data, output_filename)

将生成数据和对应的指标的表结合修改

import os
import pandas as pddef multiply_lists(list1, list2):if len(list1) != len(list2):return Noneresult = []result.append(str(list2[0]))for i in range(1, len(list1)):result.append(str(list1[i] * list2[i]))return "".join(result) def save_data_to_txt(data, filename):try:with open(filename, 'a') as f:f.write(data + "\n")print(f"数据已保存到 {filename}")except Exception as e:print(f"保存数据时发生错误:{e}")# 读取Excel文件
df = pd.read_excel('F:\python level Guarantee 2.0\LG.xlsx', header=None)
# 将每一行转换为列表
rows_as_lists = df.values.tolist()
print(rows_as_lists)
level2 = rows_as_lists.pop()
print(rows_as_lists)
level3 = rows_as_lists.pop()
print(rows_as_lists)
level4 = rows_as_lists.pop()output_filename = "F:/python level Guarantee 2.0/test.txt"with open('F:/python level Guarantee 2.0/combined_data.txt', 'r', encoding='utf-8') as f:data_str_list = [line.strip() for line in f]for i in data_str_list:data = list(i)if int(data[0]) == int(level2[0]):result = multiply_lists(data, level2)save_data_to_txt(result, output_filename)if int(data[0]) == int(level3[0]):result = multiply_lists(data, level3)save_data_to_txt(result, output_filename)if int(data[0]) == int(level4[0]):result = multiply_lists(data, level4)save_data_to_txt(result, output_filename)

2.trian

import torch
from torch import nn
from torch.utils.data import Dataset, DataLoader
import numpy as np
from torch.utils.tensorboard import SummaryWriter
DEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')class Model(nn.Module):def __init__(self):super(Model, self).__init__()self.net = nn.Sequential(nn.Linear(321, 159),nn.ReLU(),nn.Linear(159,81),nn.ReLU(),nn.Linear(81, 3),)def forward(self, input):return self.net(input)class DataRemake(Dataset):def __init__(self, path):self.data, self.label = self.transform(path)self.len = len(self.label)def __getitem__(self, index):label = self.label[index]data = self.data[index]return label, datadef __len__(self):return self.lendef transform(self, path):data_tensor_list = []label_list = []with open(path, mode='r', encoding='utf-8') as fp:data_str_list = [line.strip() for line in fp]for i in data_str_list:data = list(i)label = int(data[0])# 转换标签为 one-hot 编码if label == 2:label = [1, 0, 0]elif label == 3:label = [0, 1, 0]elif label == 4:label = [0, 0, 1]else:raise ValueError(f"未知的标签值:{label}")data = data[1:]# 检查数据的长度并进行处理if len(data) != 321:# 如果数据长度不是321,进行填充或截断操作if len(data) < 322:# 填充数据,这里假设用0填充data.extend([0] * (321 - len(data)))else:# 截断数据data = data[:321]data = np.array(list(map(float, data))).astype(np.float32)label = np.array(label).astype(np.float32)data = torch.from_numpy(data)label = torch.from_numpy(label)data_tensor_list.append(data)label_list.append(label)return data_tensor_list, label_list# 路径可能需要根据实际情况修改
train_data = DataRemake('result1.txt')
train_dataloader = DataLoader(dataset=train_data, batch_size=10)net = Model().to(DEVICE)
optimizer = torch.optim.SGD(net.parameters(), lr=0.005)
loss_func = nn.MSELoss().to(DEVICE)list_pre = []writer = SummaryWriter('logs')# 在每个epoch结束时,记录损失值
for epoch in range(1000):for labels, datas in train_dataloader:labels = labels.to(DEVICE)datas = datas.to(DEVICE)output = net(datas)loss = loss_func(output, labels)optimizer.zero_grad()loss.backward()optimizer.step()if epoch % 100 == 0:list_pre.append(output)print('epoch:{} \n loss:{}'.format(epoch, round(loss.item(), 10)))# 记录损失值到TensorBoardwriter.add_scalar('Loss/train', loss.item(), epoch)# 记得在训练结束后关闭SummaryWriter
writer.close()# 保存模型
torch.save(net.state_dict(), 'model.pth')

在这里插入图片描述

3.test

import torch
from torch import nn
from torch.utils.data import DataLoader
from sklearn.metrics import accuracy_score
from torch.utils.data import Dataset, DataLoader
import numpy as npDEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')class Model(nn.Module):def __init__(self):super(Model, self).__init__()self.net = nn.Sequential(nn.Linear(321, 159),nn.ReLU(),nn.Linear(159,81),nn.ReLU(),nn.Linear(81, 3),)def forward(self, input):return self.net(input)class DataRemake(Dataset):def __init__(self, path):self.data, self.label = self.transform(path)self.len = len(self.label)def __getitem__(self, index):label = self.label[index]data = self.data[index]return label, datadef __len__(self):return self.lendef transform(self, path):data_tensor_list = []label_list = []with open(path, mode='r', encoding='utf-8') as fp:data_str_list = [line.strip() for line in fp]for i in data_str_list:data = list(i)label = int(data[0])# 转换标签为 one-hot 编码if label == 2:label = [1, 0, 0]elif label == 3:label = [0, 1, 0]elif label == 4:label = [0, 0, 1]else:raise ValueError(f"未知的标签值:{label}")data = data[1:]# 检查数据的长度并进行处理if len(data) != 321:# 如果数据长度不是321,进行填充或截断操作if len(data) < 322:# 填充数据,这里假设用0填充data.extend([0] * (321 - len(data)))else:# 截断数据data = data[:321]data = np.array(list(map(float, data))).astype(np.float32)label = np.array(label).astype(np.float32)  # 转换标签数据类型为浮点型data = torch.from_numpy(data)label = torch.from_numpy(label)data_tensor_list.append(data)label_list.append(label)return data_tensor_list, label_list# 加载模型
model = Model().to(DEVICE)
model.load_state_dict(torch.load('model.pth'))
model.eval()  # 将模型设置为评估模式# 准备测试数据
test_data = DataRemake('test.txt')  # 假设测试数据的路径为'test_data.txt'
test_dataloader = DataLoader(dataset=test_data, batch_size=10)# 初始化用于存储预测结果和真实标签的列表
predicted_labels = []
true_labels = []# 迭代测试集,并进行预测
with torch.no_grad():for labels, datas in test_dataloader:labels = labels.to(DEVICE)datas = datas.to(DEVICE)output = model(datas)# 将输出转换为预测的标签_, predicted = torch.max(output, 1)# 将预测结果和真实标签添加到列表中predicted_labels.extend(predicted.cpu().numpy())true_labels.extend(labels.cpu().numpy())# 计算准确率
accuracy = accuracy_score(np.argmax(true_labels, axis=1), predicted_labels)  # 使用 np.argmax 获取真实标签的类别
print(f"模型在测试集上的准确率为: {accuracy}")
# import torch# # 加载模型
# model = Model().to(DEVICE)
# model.load_state_dict(torch.load('model.pth'))
# model.eval()  # 将模型设置为评估模式# # 准备输入数据
# input_data = torch.randn(10, 321).to(DEVICE)  # 示例数据,需要根据实际情况调整形状和数据类型# # 使用模型进行预测
# with torch.no_grad():
#     output = model(input_data)# # 获取预测结果
# _, predicted_labels = torch.max(output, 1)# print("预测结果:", predicted_labels)

在这里插入图片描述

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

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

相关文章

自定义类型: 结构体 (详解)

本文索引 一. 结构体类型的声明1. 结构体的声明和初始化2. 结构体的特殊声明3. 结构体的自引用 二. 结构体内存对齐1. 对齐规则2. 为啥存在对齐?3. 修改默认对齐值 三. 结构体传参四. 结构体实现位段1. 什么是位段?2. 位段的内存分配3. 位段的应用4. 位段的注意事项 ​ 前言:…

yolov5 MMCV依赖库 报错(2个错误)

1.报错内容 错误1&#xff1a; ImportError: libtorch_cuda_cu.so: cannot open shared object file: No such file or directory 错误2&#xff1a;ModuleNotFoundError: No module named ‘mmcv._ext’ 2. 原因分析 python 、torch、mmcv版本兼容问题 3.解决方法 首先运行…

linux进阶篇:文件查找的利器——grep命令+管道操作详解

Linux文件查找的利器——grep命令管道操作详解 1 grep简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来。 Uni…

BackTrader 中文文档(十八)

原文&#xff1a;www.backtrader.com/ OCO 订单 原文&#xff1a;www.backtrader.com/blog/posts/2017-03-19-oco/oco/ 版本 1.9.34.116 添加了OCO&#xff08;又称一次取消其他&#xff09;到回测工具中。 注意 这只在回测中实现&#xff0c;尚未实现对实时经纪商的实现 注…

2.3 iHRM人力资源 - 路由、左侧菜单栏、处理token失效、退出登录、修改密码

iHRM人力资源 - 处理token失效、退出登录、修改密码 文章目录 iHRM人力资源 - 处理token失效、退出登录、修改密码一、退出登录1.1 处理token失效1.2 调整下拉菜单1.3 退出登录 二、修改密码2.1 弹出层dialog2.2 表单结构2.3 表单校验2.4 表单提交 三、路由3.1 清理多余组件和路…

面试:lock 和 synchronized

一、语法层面 synchronized 是关键字&#xff0c;源码在jvm中&#xff0c;用c语言实现Lock 是接口&#xff0c;源码由jdk提供&#xff0c;用java语言实现使用synchronized时&#xff0c;退出同步代码块锁会自动释放&#xff0c;而使用Lock时&#xff0c;需要手动调用unlock方法…

用于扩展Qt自身的插件(下)

扩展Qt自身的插件 引言必须满足项创建插件示例代码生成插件配置加载插件的环境创建使用插件的项目配置库和头文件依赖的步骤:应用程序代码运行结果总结引言 本文继上篇的扩展Qt自身的插件,接着记录Qt自身的插件,只不过本文提及的用于扩展Qt自身的插件是可以在QtCreator的设…

Java反序列化基础-类的动态加载

类加载器&双亲委派 什么是类加载器 类加载器是一个负责加载器类的对象&#xff0c;用于实现类加载的过程中的加载这一步。每个Java类都有一个引用指向加载它的ClassLoader。而数组类是由JVM直接生成的&#xff08;数组类没有对应的二进制字节流&#xff09; 类加载器有哪…

基于ubuntu22.04系统安装nvidia A100驱动与NVLink启用

1、官方仓库 针对驱动包下载认准nvidia官网 dpkg -i nvidia-driver-local-repo-ubuntu2204-550.54.15_1.0-1_amd64.deb apt update apt search nvidia-driver-5502、安装 根据步骤1apt search nvidia-driver-550查出版本&#xff1a;此驱动包封在nvidia-driver-local-repo-ub…

基于springboot的医护人员排班系统

随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了医护人员排班系统的开发全过程。通过分析医护人员排班系统管理的不足&#xff0c;创建了一个计算机管理医护人员排班系统的方案。文章介绍了医护人员排班系统的系统分…

【数据结构与算法】之双向链表及其实现!

​ 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 目录 1、双向链表的结构及概念 2、双向链表的实现 2.1 要实现的接口…

算法设计与分析实验报告c++实现(矩阵链相乘、投资问题、完全背包问题、数字三角形、最小生成树、背包问题)

一、实验目的 1&#xff0e;加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用动态…