当前位置: 首页 > news >正文

Python训练营-Day40-训练和测试的规范写法

1.单通道图片训练

# import torch
# import torch.nn as nn
# import torch.optim as optim
# from torchvision import datasets, transforms
# from torch.utils.data import DataLoader
# import matplotlib.pyplot as plt
# import numpy as np# # 设置中文字体支持
# plt.rcParams["font.family"] = ["SimHei"]
# plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# # 1. 数据预处理
# transform = transforms.Compose([
#     transforms.ToTensor(),  # 转换为张量并归一化到[0,1]
#     transforms.Normalize((0.1307,), (0.3081,))  # MNIST数据集的均值和标准差
# ])# # 2. 加载MNIST数据集
# train_dataset = datasets.MNIST(
#     root='./data',
#     train=True,
#     download=True,
#     transform=transform
# )# test_dataset = datasets.MNIST(
#     root='./data',
#     train=False,
#     transform=transform
# )# # 3. 创建数据加载器
# batch_size = 64  # 每批处理64个样本
# train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
# test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)# # 4. 定义模型、损失函数和优化器
# class MLP(nn.Module):
#     def __init__(self):
#         super(MLP, self).__init__()
#         self.flatten = nn.Flatten()  # 将28x28的图像展平为784维向量
#         self.layer1 = nn.Linear(784, 128)  # 第一层:784个输入,128个神经元
#         self.relu = nn.ReLU()  # 激活函数
#         self.layer2 = nn.Linear(128, 10)  # 第二层:128个输入,10个输出(对应10个数字类别)#     def forward(self, x):
#         x = self.flatten(x)  # 展平图像
#         x = self.layer1(x)   # 第一层线性变换
#         x = self.relu(x)     # 应用ReLU激活函数
#         x = self.layer2(x)   # 第二层线性变换,输出logits
#         return x# # 检查GPU是否可用
# device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# # 初始化模型
# model = MLP()
# model = model.to(device)  # 将模型移至GPU(如果可用)# criterion = nn.CrossEntropyLoss()  # 交叉熵损失函数,适用于多分类问题
# optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器# # 5. 训练模型(记录每个 iteration 的损失)
# def train(model, train_loader, test_loader, criterion, optimizer, device, epochs):
#     model.train()  # 设置为训练模式#     # 新增:记录每个 iteration 的损失
#     all_iter_losses = []  # 存储所有 batch 的损失
#     iter_indices = []     # 存储 iteration 序号(从1开始)#     for epoch in range(epochs):
#         running_loss = 0.0
#         correct = 0
#         total = 0#         for batch_idx, (data, target) in enumerate(train_loader):
#             data, target = data.to(device), target.to(device)  # 移至GPU(如果可用)#             optimizer.zero_grad()  # 梯度清零
#             output = model(data)  # 前向传播
#             loss = criterion(output, target)  # 计算损失
#             loss.backward()  # 反向传播
#             optimizer.step()  # 更新参数#             # 记录当前 iteration 的损失(注意:这里直接使用单 batch 损失,而非累加平均)
#             iter_loss = loss.item()
#             all_iter_losses.append(iter_loss)
#             iter_indices.append(epoch * len(train_loader) + batch_idx + 1)  # iteration 序号从1开始#             # 统计准确率和损失(原逻辑保留,用于 epoch 级统计)
#             running_loss += iter_loss
#             _, predicted = output.max(1)
#             total += target.size(0)
#             correct += predicted.eq(target).sum().item()#             # 每100个批次打印一次训练信息(可选:同时打印单 batch 损失)
#             if (batch_idx + 1) % 100 == 0:
#                 print(f'Epoch: {epoch+1}/{epochs} | Batch: {batch_idx+1}/{len(train_loader)} '
#                       f'| 单Batch损失: {iter_loss:.4f} | 累计平均损失: {running_loss/(batch_idx+1):.4f}')#         # 原 epoch 级逻辑(测试、打印 epoch 结果)不变
#         epoch_train_loss = running_loss / len(train_loader)
#         epoch_train_acc = 100. * correct / total
#         epoch_test_loss, epoch_test_acc = test(model, test_loader, criterion, device)#         print(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')#     # 绘制所有 iteration 的损失曲线
#     plot_iter_losses(all_iter_losses, iter_indices)
#     # 保留原 epoch 级曲线(可选)
#     # plot_metrics(train_losses, test_losses, train_accuracies, test_accuracies, epochs)#     return epoch_test_acc  # 返回最终测试准确率# # 6. 测试模型
# def test(model, test_loader, criterion, device):
#     model.eval()  # 设置为评估模式
#     test_loss = 0
#     correct = 0
#     total = 0#     with torch.no_grad():  # 不计算梯度,节省内存和计算资源
#         for data, target in test_loader:
#             data, target = data.to(device), target.to(device)
#             output = model(data)
#             test_loss += criterion(output, target).item()#             _, predicted = output.max(1)
#             total += target.size(0)
#             correct += predicted.eq(target).sum().item()#     avg_loss = test_loss / len(test_loader)
#     accuracy = 100. * correct / total
#     return avg_loss, accuracy  # 返回损失和准确率# # 7.绘制每个 iteration 的损失曲线
# def plot_iter_losses(losses, indices):
#     plt.figure(figsize=(10, 4))
#     plt.plot(indices, losses, 'b-', alpha=0.7, label='Iteration Loss')
#     plt.xlabel('Iteration(Batch序号)')
#     plt.ylabel('损失值')
#     plt.title('每个 Iteration 的训练损失')
#     plt.legend()
#     plt.grid(True)
#     plt.tight_layout()
#     plt.show()# # 8. 执行训练和测试(设置 epochs=2 验证效果)
# epochs = 2  
# print("开始训练模型...")
# final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)
# print(f"训练完成!最终测试准确率: {final_accuracy:.2f}%")

2.彩色图片训练

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 1. 数据预处理
transform = transforms.Compose([transforms.ToTensor(),                # 转换为张量transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  # 标准化处理
])# 2. 加载CIFAR-10数据集
train_dataset = datasets.CIFAR10(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.CIFAR10(root='./data',train=False,transform=transform
)# 3. 创建数据加载器
batch_size = 64
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)# 4. 定义MLP模型(适应CIFAR-10的输入尺寸)
class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.flatten = nn.Flatten()  # 将3x32x32的图像展平为3072维向量self.layer1 = nn.Linear(3072, 512)  # 第一层:3072个输入,512个神经元self.relu1 = nn.ReLU()self.dropout1 = nn.Dropout(0.2)  # 添加Dropout防止过拟合self.layer2 = nn.Linear(512, 256)  # 第二层:512个输入,256个神经元self.relu2 = nn.ReLU()self.dropout2 = nn.Dropout(0.2)self.layer3 = nn.Linear(256, 10)  # 输出层:10个类别def forward(self, x):# 第一步:将输入图像展平为一维向量x = self.flatten(x)  # 输入尺寸: [batch_size, 3, 32, 32] → [batch_size, 3072]# 第一层全连接 + 激活 + Dropoutx = self.layer1(x)   # 线性变换: [batch_size, 3072] → [batch_size, 512]x = self.relu1(x)    # 应用ReLU激活函数x = self.dropout1(x) # 训练时随机丢弃部分神经元输出# 第二层全连接 + 激活 + Dropoutx = self.layer2(x)   # 线性变换: [batch_size, 512] → [batch_size, 256]x = self.relu2(x)    # 应用ReLU激活函数x = self.dropout2(x) # 训练时随机丢弃部分神经元输出# 第三层(输出层)全连接x = self.layer3(x)   # 线性变换: [batch_size, 256] → [batch_size, 10]return x  # 返回未经过Softmax的logits# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 初始化模型
model = MLP()
model = model.to(device)  # 将模型移至GPU(如果可用)criterion = nn.CrossEntropyLoss()  # 交叉熵损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器# 5. 训练模型(记录每个 iteration 的损失)
def train(model, train_loader, test_loader, criterion, optimizer, device, epochs):model.train()  # 设置为训练模式# 记录每个 iteration 的损失all_iter_losses = []  # 存储所有 batch 的损失iter_indices = []     # 存储 iteration 序号for epoch in range(epochs):running_loss = 0.0correct = 0total = 0for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)  # 移至GPUoptimizer.zero_grad()  # 梯度清零output = model(data)  # 前向传播loss = criterion(output, target)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 更新参数# 记录当前 iteration 的损失iter_loss = loss.item()all_iter_losses.append(iter_loss)iter_indices.append(epoch * len(train_loader) + batch_idx + 1)# 统计准确率和损失running_loss += iter_loss_, predicted = output.max(1)total += target.size(0)correct += predicted.eq(target).sum().item()# 每100个批次打印一次训练信息if (batch_idx + 1) % 100 == 0:print(f'Epoch: {epoch+1}/{epochs} | Batch: {batch_idx+1}/{len(train_loader)} 'f'| 单Batch损失: {iter_loss:.4f} | 累计平均损失: {running_loss/(batch_idx+1):.4f}')# 计算当前epoch的平均训练损失和准确率epoch_train_loss = running_loss / len(train_loader)epoch_train_acc = 100. * correct / total# 测试阶段model.eval()  # 设置为评估模式test_loss = 0correct_test = 0total_test = 0with torch.no_grad():for data, target in test_loader:data, target = data.to(device), target.to(device)output = model(data)test_loss += criterion(output, target).item()_, predicted = output.max(1)total_test += target.size(0)correct_test += predicted.eq(target).sum().item()epoch_test_loss = test_loss / len(test_loader)epoch_test_acc = 100. * correct_test / total_testprint(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')# 绘制所有 iteration 的损失曲线plot_iter_losses(all_iter_losses, iter_indices)return epoch_test_acc  # 返回最终测试准确率# 6. 绘制每个 iteration 的损失曲线
def plot_iter_losses(losses, indices):plt.figure(figsize=(10, 4))plt.plot(indices, losses, 'b-', alpha=0.7, label='Iteration Loss')plt.xlabel('Iteration(Batch序号)')plt.ylabel('损失值')plt.title('每个 Iteration 的训练损失')plt.legend()plt.grid(True)plt.tight_layout()plt.show()# 7. 执行训练和测试
epochs = 20  # 增加训练轮次以获得更好效果
print("开始训练模型...")
final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)
print(f"训练完成!最终测试准确率: {final_accuracy:.2f}%")# # 保存模型
# torch.save(model.state_dict(), 'cifar10_mlp_model.pth')
# # print("模型已保存为: cifar10_mlp_model.pth")

@浙大疏锦行

相关文章:

Python训练营-Day40-训练和测试的规范写法

1.单通道图片训练 # import torch # import torch.nn as nn # import torch.optim as optim # from torchvision import datasets, transforms # from torch.utils.data import DataLoader # import matplotlib.pyplot as plt # import numpy as np# # 设置中文字体支持 # plt…...

【Python-Day 29】万物皆对象:详解 Python 类的定义、实例化与 `__init__` 方法

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

内存泄漏和内存溢出的区别

内存泄漏(Memory Leak)和内存溢出(Memory Overflow / Out Of Memory, OOM)是软件开发中两个密切相关但又本质不同的内存问题: 核心区别一句话概括: 内存泄漏: 有垃圾对象占用内存却无法被回收&…...

Linux系统---Nginx配置nginx状态统计

配置Nignx状态统计 1、下载vts模块 https://github.com/vozlt/nginx-module-vts [rootclient ~]# nginx -s stop [rootclient ~]# ls anaconda-ks.cfg nginx-1.27.3 ceph-release-1-1.el7.noarch.rpm nginx-1.27.3.tar.gz info.sh …...

linux操作系统的软件架构分析

一、linux操作系统的层次结构 1.内核的主要功能 1)进程管理 2)内存管理 3)文件系统 4)进程间通信、I/O系统、网络通信协议等 2.系统程序 1)系统接口函数库,比如libc 2)shell程序 3)编译器、编辑…...

快速手搓一个MCP服务指南(三):FastMCP的核心组件-构建MCP服务的关键技术实现

FastMCP 是一套面向 LLM 应用开发的工具框架,通过标准化协议衔接大语言模型与外部功能组件,构建「LLM工具」的闭环交互体系。其核心技术体系包含四大模块:工具系统将 Python 函数转化为 LLM 可调用的能力单元,通过类型注解实现参数…...

创建首个 Spring Boot 登录项目

📌 摘要 在 Java Web 开发中,登录功能是最基础也是最重要的模块之一。本文将手把手带你使用 IntelliJ IDEA 和 Maven 构建一个基于 Spring Boot 的简单登录系统,涵盖: 使用 IDEA 创建 Spring Boot 项目配置 Maven 依赖&#xff…...

order、sort、distribute和cluster by(Spark/Hive)

1. abstract ORDER BY:完整查询结果的全局行排序。与SORT BY、CLUSTER BY、DISTRIBUTE BY互斥,不能同时使用。 示例SELECT * FROM table_name ORDER BY column_name;SORT BY:只在每个分区内排序,局部排序结果不是全局有序。与ORD…...

# Python中等于号的使用

# Python中等于号的使用 ## 1. 问题的分析与思考 在Python中,等于号()是一个赋值运算符,用于将右侧的值或表达式的结果赋给左侧的变量。这是Python(以及许多其他编程语言)中非常基础且核心的一个概念。理…...

无人机神经网络模块运行与技术难点

一、神经网络模块的运行方式 1. 分层处理架构 感知层 多模态数据融合:通过八元数卷积网络(OCNN)统一处理LiDAR、摄像头、IMU等异构传感器数据,将点云坐标(x/y/z)、图像RGB与光流信息编码至8维虚部&#…...

宝塔服务器调优工具 1.1(Opcache优化)

第一步:宝塔服务器调优工具 1.1(按照下面的参数填写) 第二步:路径/www/server/php/80/etc/php.ini 搜索jit jit1235 其中1235根据服务器情况修改 第三步:路径/www/server/php/80/etc/php-cli.ini 搜索 jit1235 其中…...

day041-web集群架构搭建

文章目录 0. 老男孩思想-高薪四板斧1. web集群架构图2. 搭建异地备份服务2.1 服务端-阿里云服务器2.1.1 查看rsync软件包2.1.2 添加rsync配置文件2.1.3 添加虚拟用户2.1.4 创建校验用户密码文件2.1.5 创建备份目录2.1.6 启动服务2.1.7 开放安全组端口2.1.8 发送检查邮件 2.2 客…...

国产化条码类库Spire.Barcode教程:如何使用 C# 读取 PDF 中的条码(两种方法轻松实现)

在 PDF 文档的 .NET 平台处理流程中,使用 C# 读取 PDF 条码 是一项常见需求,特别适用于处理扫描件或电子表单。无论是物流、金融、医疗还是制造行业,PDF 文档中经常包含用于追踪或识别的条码。这些条码可能是嵌入图像,也可能是矢量…...

vue 3 计算器

效果&#xff1a; <template><div class"calculator-container"><div class"calculator"><!-- 显示区域 --><div class"display">{{ formattedDisplay }}</div><!-- 按钮区域 --><div class"…...

CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程

一.介绍 CRMEB多店版是一款为品牌连锁门店打造的私域电商解决方案&#xff0c;以三大运营模式为核心&#xff0c;助力品牌连锁门店轻松构建全渠道、一体化的私域电商生态&#xff0c;促进“线上电商”与“线下门店”销售运营融合&#xff0c;加速品牌数字化转型&#xff0c;为…...

主机复制文字和文件到 Ubuntu 虚拟机

在 VMware Workstation Pro 16 中复制文字和文件到 Ubuntu 虚拟机&#xff0c;方法如下&#xff1a; Open-VM-Tools 禁用 Wayland 解决 。 1.安装 VMware Tools&#xff08;推荐&#xff09;或 open-vm-tools&#xff1a; sudo apt update sudo apt install open-vm-tools…...

性能测试 —— 数据库的连接池和主从同步和分表分区

一、数据库的调优&#xff08;库层面&#xff09; 1、数据库连接池 1、介绍&#xff1a;数据库连接池(Database Connection Pool)是一种用于管理数据库连接的技术&#xff0c;它通过预先创建并维护一组数据库连接来提高应用程序的性能和可扩展性。 2、创建、管理、关闭 数据…...

猿人学js逆向比赛第一届第十二题

一、分析请求 看到这里只有一个m的密文参数&#xff0c;没有cookie&#xff0c;请求头等其他的参数&#xff0c;那么这里跟一堆栈信息。 很顺利地锁定了m的加密位置。看到是字符串拼接然后使用btoa函数进行编码&#xff0c;那么这里尝试使用Python复现一下。顺利拿到结果。 复现…...

第十节 新特性与趋势-CSS层叠规则升级

以下是关于 ​​CSS层叠规则升级​​ 的全面解析&#xff0c;结合最新规范&#xff08;如级联层layer&#xff09;和传统层叠机制的演进&#xff0c;从核心原理、应用场景到实践策略的系统性总结&#xff1a; 一、传统层叠规则的三大支柱 CSS层叠规则的传统机制基于以下三个维…...

关键领域软件工厂的安全中枢如何全面升级供应链检测能力

随着软件供应链安全体系在互联网、金融等领域逐步成熟&#xff0c;关键领域正加速迈向以 MLOps、软件工厂为核心的新型研发生态。在这一过程中&#xff0c;面对代码安全、依赖合规、系统可信等多重挑战&#xff0c;传统人工审查模式已难以满足国家级高安全性要求。 Gitee Scan…...

西门子G120XA变频器:数据中心能效革命的核心引擎

在数字经济爆发式增长的今天&#xff0c;数据中心已成为支撑社会运转的"数字心脏"。然而&#xff0c;其庞大的能耗需求与绿色低碳目标之间的矛盾日益凸显——尤其是冷却系统作为数据中心第二大能耗单元&#xff08;占比约35%&#xff09;&#xff0c;正成为能效提升的…...

从零开始学习Spring Cloud Alibaba (一)

人狠话不多,直接开始少点屁话本着共同学习进步的目的和大家交流如有不对的地方望铁子们多多谅解 准备工具 开发工具 idea Java环境 jdk17 容器: docker Maven 3.8.6 仓库镜像阿里云 <mirror><id>alimaven</id><name>aliyun maven</name><…...

【C/C++】C++ 编程规范:101条规则准则与最佳实践

C 编程规范&#xff1a;101条规则准则与最佳实践 引言 C 是一门强大而复杂的语言&#xff0c;能高效控制硬件&#xff0c;也能写出优雅抽象。然而&#xff0c;正因其复杂性&#xff0c;项目中若缺乏统一规范&#xff0c;极易陷入混乱、难维护、易出错的泥潭。 本文总结了 10…...

PyTorch topk() 用法详解:取最大值

torch.topk(input, k) 返回张量中最大的 k 个元素以及它们在原张量中的 索引。 函数原型 torch.topk(input, k, dimNone, largestTrue, sortedTrue)参数说明&#xff1a; 参数说明input输入张量k要取出的前 k 个值dim指定沿哪个维度取值&#xff08;默认是最后一维&#xff…...

毕业论文查重原理及降重方法

【30%的重复率有那么重要吗&#xff1f;】 老师说论文重读率必须低于30%&#xff0c;否则无法毕业&#xff01; 如果您在专科或者普通本科学生&#xff0c;我只能这样一句话告诉你&#xff1a;你想多了~&#xff0c; 真的想多了~~~&#xff0c;一篇论文还不至于让你不能毕…...

Golang Kratos 系列:业务分层的若干思考(二)

上一篇文章简单讨论了领域层在Kratos中的使用&#xff0c;主要涉及引入领域层&#xff0c;将数据层和业务层之间的解耦&#xff0c;接下来讨论一个稍微全面一点的例子&#xff0c;在此基础上引入外部Api&#xff08;主要是易变部分&#xff09;的领域层下的情况。 我们同样可以…...

技术伦理之争:OpenAI陷抄袭风波,法院强制下架宣传视频

在AI巨头OpenAI宣布以65亿美元天价收购苹果前设计总监Jony Ive的硬件公司IO仅一个月后&#xff0c;一场抄袭指控将这家科技明星企业推上风口浪尖。 源自谷歌X实验室的初创企业IYO将OpenAI告上法庭&#xff0c;指控其窃取智能耳塞核心技术&#xff0c;并通过巨额收购试图掩盖抄袭…...

烟花爆竹生产企业库房存储安全风险预警系统

烟花爆竹生产企业库房存储安全风险预警系统是保障库房物资安全、规范作业流程、防范安全事故的重要技术手段&#xff0c;涵盖多个关键预警功能。​ 温湿度预警​ 在库房内安装温湿度传感器&#xff0c;这些传感器如同敏锐的“环境感知员”&#xff0c;能够实时监测库房内环境变…...

Jenkins+Jmeter+Ant接口持续集成

2025最新Jmeter接口测试从入门到精通&#xff08;全套项目实战教程&#xff09; 前言&#xff1a; 为什么要用Jmeter做接口测试&#xff1a; 当选择这套方案的时候&#xff0c;很多人会问&#xff0c;为什么选择Jmeter做Case管理&#xff1f;为什么不自己写框架&#xff1f;说…...

基于STM32的寻迹小车设计

标题:基于STM32的寻迹小车设计 内容:1.摘要 本文围绕基于STM32的寻迹小车设计展开。背景是随着自动化技术的发展&#xff0c;寻迹小车在工业巡检、物流运输等领域有广泛应用前景。目的是设计一款能稳定、准确寻迹的小车。方法上&#xff0c;以STM32微控制器为核心&#xff0c;…...

【150】基于SSM+Vue实现的小说阅读小程序(有文档)

系统介绍 基于SSMVue实现的小说阅读小程序采用前后端分离的架构方式&#xff0c;系统设计了管理员、用户两种角色&#xff0c;系统分为管理端、小程序端&#xff0c;管理端实现了管理员登录、个人中心、管理员管理、帮助中心管理、基础数据管理、论坛中心管理、公告资讯管理、…...

ValKey中使用SIMD指令优化bitcount命令

一、AVX/AVX2 的历史演进 随着计算机技术的飞速发展&#xff0c;数据处理需求呈指数级增长&#xff0c;SIMD&#xff08;单指令多数据&#xff09;技术应运而生。它通过一条指令同时处理多个数据元素&#xff0c;大幅提升计算效率&#xff0c;从早期的 MMX 技术起步&#xff0…...

leetcode114-二叉树展开为链表

leetcode 114 思路 用简单例子推导规律 不要一开始就看复杂的树&#xff0c;先从最简单的情况入手 案例一&#xff1a;只有一个节点 输入&#xff1a;1 输出&#xff1a;1不需要任何操作&#xff0c;直接返回 案例二&#xff1a;有两个节点 输入&#xff1a; 1/2输出&a…...

第七章 习题

1.给出下面表达式的逆波兰表示(后缀式): 3请将表达式-(ab)* (cd)-(abc)分别表示成三元式,间接三元式和四元式序列 四元式(Op,arg1,arg2,result) (,a,b,T1) (,c,d,T2) (*,T1,T2,T3) (uminus,T3,-,T4) (,a,b,T5) (,T5,c,T6) (-,T4,T6,r) 三元式 (op,arg1,arg2) (0) (,…...

Spring Ai Alibaba Graph实现五大工作流模式

Spring Ai Alibaba Graph实现五大工作流模式 概述 在 building-effective-agents 一文中,Anthropic将"智能体系统"(agentic systems),从架构层面分为 “工作流”&#xff08;workflows&#xff09;和 “智能体”&#xff08;agents&#xff09;&#xff1a; 工作流…...

基于单片机的语音控制设计(论文)

摘要 自然语音作为人机交互在目前得以广泛的应用以及极大的发展前景。该设计介绍了基于非指定人语音芯片LD3320的语音控制器结构及其实现语音控制的方法。该语音控制器利用STM32F103C8T6单片机作为主要控制器&#xff0c;控制芯片对输入的进行语音识别并处理&#xff0c;根据语…...

【网络安全】从IP头部看网络通信:IPv4、IPv6与抓包工具 Wireshark 实战

从IP头部看网络通信&#xff1a;IPv4、IPv6与抓包工具 Wireshark实战 在网络安全分析和数据通信的世界中&#xff0c;一切都始于“数据包”。数据包是网络上传输的基本单位&#xff0c;而数据包的结构与内容&#xff0c;正是我们理解网络行为的核心。本文将带你深入了解 IP 协…...

计算机组成原理笔记(公众号版本)

1.MAR&#xff0c;存储单元和PC位数之间的关系 我们的MAR位数取决于我们的存储单元的个数&#xff1b; PC位数也是取决于我们的存储单元的个数&#xff1b; 假设我们是64个存储单元&#xff0c;我们的这个MAR实际上就是6位&#xff0c;因为这个2的6次方等于我们的64吗&#…...

CPM基本原理

CPM&#xff08;连续相位调制&#xff0c;Continuous Phase Modulation &#xff09;是一种恒包络&#xff0c;信号相位随时间连续变化的调制技术 。其优势显著&#xff0c;连续相位特性&#xff0c;频谱效率高&#xff0c;对带外辐射抑制好&#xff1b;相位平滑过渡&#xff0…...

浅谈开源在线客服系统与 APP 集成的技术方案与优劣势

在为移动端 App 接入在线客服系统的过程中&#xff0c;我经历了长时间的技术选型探索。最初&#xff0c;我也曾被一些“技术理想主义”选项所吸引&#xff0c;比如让用户自己研发界面我提供 API 以获得最高自由度&#xff0c;或集成 SDK 以追求原生体验。然而&#xff0c;随着项…...

AutoGPT,自主完成复杂任务

AutoGPT是一个开源的AI Agent项目&#xff0c;它的核心目标是让AI能够自主完成复杂任务&#xff0c;而不仅仅是回答单个问题。简单来说&#xff0c;它让AI具备了"自主思考和行动"的能力。 1. AutoGPT的核心概念 什么是AI Agent&#xff1f; AI Agent&#xff08;智…...

基于Qt C++的影像重采样批处理工具设计与实现

摘要 本文介绍了一种基于Qt C++框架开发的高效影像重采样批处理工具。该工具支持按分辨率(DPI) 和按缩放倍率两种重采样模式,提供多种插值算法选择,具备强大的批量处理能力和直观的用户界面。工具实现了影像处理的自动化流程,显著提高了图像处理效率,特别适用于遥感影像处…...

Qt Windows平台调用ffmpeg动态库

本文基于QT6.8实测验证。 一、下载预编译库‌ 从官方或第三方源获取FFmpeg的Windows动态库&#xff08;Shared版本&#xff09;&#xff0c;解压后需包含以下目录&#xff1a; bin   DLL文件&#xff08;运行时依赖&#xff09;include   头文件lib   .lib或.dll.a链接…...

猿人学js逆向比赛第一届第十三题

一、分析请求 通过分析请求得知&#xff0c;本题目的参数为yuanrenxue_cookie&#xff0c;因为题目中中明说了是动态cookie&#xff0c;所以可以先删除这个cookie然后下脚本断点&#xff0c;简单分析看一下页面执行的js代码逻辑。 在经过这段代码的时候很明显的可以看到这里的有…...

React性能优化精髓之一:频繁setState导致滚动卡顿的解决方案

在开发一个 List 页面时&#xff0c;我们遇到了一个典型的React性能问题&#xff1a;页面在滚动时出现明显卡顿。这个问题的调试过程充满了误判和重新思考&#xff0c;最终发现了一个重要的性能优化原则。 问题现象 我们有一个监控仪表盘页面&#xff0c;包含多个图表组件。用…...

JavaScript 事件常用属性

一、事件对象基础 在事件处理函数中&#xff0c;浏览器会自动传入一个 event 对象&#xff0c;它包含了与事件相关的所有信息。 element.addEventListener(click, function(event) {// event 是事件对象 }); 二、常见事件属性 属性名 类型 描述 type String 事件类…...

配置自己的NTP 服务器做时间同步

✅ 推荐方案&#xff1a;使用 chrony 搭建 NTP 服务器&#xff08;适用于 CentOS 7/8/9&#xff09; chrony 是 CentOS 推荐的 NTP 实现&#xff0c;精度高、资源占用低、同步快&#xff0c;默认在 CentOS 8 中取代了 ntpd。 &#x1f527; 一、安装 chrony sudo yum install…...

基于深度学习的双色球智能预测系统:从原理到实现

需要源码的小伙伴可以在这里直接下载&#xff1a;基于深度学习的双色球智能预测系统&#xff1a;从原理到实现&#xff08;完整代码训练数据&#xff09;可直接运行-预测&#xff09;资源-CSDN下载可直接运行&#xff0c;包括完整的训练测试数据&#xff0c;让你的双色球更准&a…...

STM32[笔记]--4.嵌入式硬件基础

4.嵌入式硬件基础 4.1认识上官二号开发板 主控芯片:STM32F103C8T6高速晶振:8M低速晶振:32.768kLED:5颗KEY:3个 主控芯片内部的资源如下项目介绍内核Cortex-M3Flsah64K*8bitSRAM20K*8bitGPIO37个GPIO,分别为PA0-PB15,PC13-PC15,PD0-PD1ADC2个12bitADC合计12了通道,外部通…...

Springboot项目中使用手机号短信验证码注册登录实现

文章目录 1. 功能概述2. 技术栈3. 实现步骤3.1 短信服务集成3.2 创建短信工具类3.3 验证码生成和存储3.4 控制器实现发送短信验证码手机号+验证码注册短信验证码登录3.5 服务层实现4. 前端实现4.1 API层4.2 手机号注册页面5. 最佳实践6. 总结本文将介绍如何在Spring Boot应用中…...