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

深度学习实战 04:卷积神经网络之 VGG16 复现三(训练)

在后续的系列文章中,我们将逐步深入探讨 VGG16 相关的核心内容,具体涵盖以下几个方面:

  1. 卷积原理篇:详细剖析 VGG 的 “堆叠小卷积核” 设计理念,深入解读为何 3×3×2 卷积操作等效于 5×5 卷积,以及 3×3×3 卷积操作等效于 7×7 卷积。

  2. 架构设计篇:运用 PyTorch 精确定义 VGG16 类,深入解析 “Conv - BN - ReLU - Pooling” 这一标准模块的构建原理与实现方式。

3. 训练实战篇:在小规模医学影像数据集上对 VGG16 模型进行严格验证,并精心调优如 batch_size、学习率等关键超参数,以实现模型性能的最优化。

若您希望免费获取本系列文章的完整代码,可通过添加 V 信:18983376561 来获取。

一、VGG16 架构

VGG16 作为卷积神经网络中的经典架构,其结构清晰且具有强大的特征提取能力。下面是 VGG16 的架构图:

二、训练流程与代码解析

1. 数据预处理:让图像适应模型输入

CIFAR-10是一个更接近普适物体的彩色图像数据集。CIFAR-10 是由Hinton 的学生Alex Krizhevsky 和Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含10 个类别的RGB 彩色图片:飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。每个图片的尺寸为32 × 32 ,每个类别有6000个图像,数据集中一共有50000 张训练图片和10000 张测试图片。

然而,VGG16 模型原设计是针对 224x224 的图像输入。为了使 CIFAR10 数据集能够适配 VGG16 模型,我们需要对图像进行预处理。具体而言,通过transforms.Resize((224, 224))将图像缩放至 224x224 的尺寸,再利用Normalize进行标准化处理,将均值和标准差均设为 0.5,从而使像素值归一化到 [-1, 1] 区间。以下是关键代码片段:

import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchinfo import summaryfrom VGG16 import VGG16
device = torch.device('cuda')transform_train = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])transform_test = transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])

2. 数据加载:高效读取与批量处理

为了实现数据的高效读取与批量处理,我们使用DataLoader来加载数据。设置batch_size = 128,以平衡内存使用和训练效率;同时,设置num_workers = 12,利用多线程技术加速数据读取过程。对于训练集,我们将shuffle参数设置为True,打乱数据顺序,避免模型记忆数据顺序而导致过拟合;对于测试集,将shuffle参数设置为False,保持数据顺序,便于结果的复现和评估。以下是具体代码:

train = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform_train)
trainloader = torch.utils.data.DataLoader(train, batch_size=128, shuffle=True, num_workers=12)test = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform_test)
testloader = torch.utils.data.DataLoader(test, batch_size=128, shuffle=False, num_workers=12)

3. 模型构建:调用自定义 VGG16 网络

在代码中,我们假设VGG16类已经被正确定义,该类应包含 16 层卷积层和全连接层结构。通过model.to(device)将模型部署到 GPU 上进行训练,以加速训练过程。由于 CIFAR10 是一个 10 分类任务,因此模型的最终全连接层输出维度应为 10。如果没有可用的 GPU,需要将device设置为cpu,但训练速度会显著降低。

4. 训练配置:损失函数与优化策略

在训练过程中,我们需要选择合适的损失函数和优化策略来指导模型的学习。具体配置如下:

  • 损失函数:选用CrossEntropyLoss来处理多分类问题,该损失函数会自动整合 Softmax 计算,简化了代码实现。
  • 优化器:选择随机梯度下降(SGD)作为优化器,设置学习率lr = 0.1,动量momentum = 0.9以加速收敛过程,同时设置权重衰减weight_decay = 0.0001,采用 L2 正则化防止模型过拟合。
  • 学习率调度器:使用ReduceLROnPlateau根据验证损失自动调整学习率。当验证损失连续 5 个 epoch 未下降时,学习率将乘以 0.1(factor = 0.1),这样可以避免模型陷入局部最优解。以下是相关代码:
classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
model = VGG16().to(device)criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9, weight_decay=0.0001)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, factor = 0.1, patience=5)EPOCHS = 200
for epoch in range(EPOCHS):losses = []running_loss = 0for i, inp in enumerate(trainloader):inputs, labels = inpinputs, labels = inputs.to(device), labels.to(device)optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)losses.append(loss.item())loss.backward()optimizer.step()running_loss += loss.item()if i % 100 == 0 and i > 0:print(f'Loss [{epoch + 1}, {i}](epoch, minibatch): ', running_loss / 100)running_loss = 0.0avg_loss = sum(losses) / len(losses)scheduler.step(avg_loss)

5. 训练循环:迭代优化与监控

在 200 个 epoch 的训练过程中,我们每 100 个批次打印一次平均损失,以便实时监控模型的训练进度。从输出日志可以看出,模型初始损失较高(第 1 个 epoch 约为 2.3),随着训练的不断进行,损失逐渐下降,最终损失趋近于 0.001 左右,这表明模型对训练数据的拟合效果良好。

print('Training Done')
# Loss [1, 100](epoch, minibatch):  3.8564858746528627
# Loss [1, 200](epoch, minibatch):  2.307221896648407
# Loss [1, 300](epoch, minibatch):  2.304955897331238
# Loss [2, 100](epoch, minibatch):  2.3278213500976563
# Loss [2, 200](epoch, minibatch):  2.3041475653648376
# Loss [2, 300](epoch, minibatch):  2.3039899492263793
# ...
# Loss [199, 100](epoch, minibatch):  0.001291145777431666
# Loss [199, 200](epoch, minibatch):  0.0017596399529429619
# Loss [199, 300](epoch, minibatch):  0.0013808918403083225
# Loss [200, 100](epoch, minibatch):  0.0013940928343799896
# Loss [200, 200](epoch, minibatch):  0.0011531753832969116
# Loss [200, 300](epoch, minibatch):  0.001689423452335177

三、训练结果与问题分析

在训练完成后,我们可以对模型进行保存和加载操作,以便后续的使用和评估。以下是保存和加载模型的代码示例:

# 保存整个模型
torch.save(model, 'VGG16.pth')# 或者只保存模型的参数
torch.save(model.state_dict(), 'VGG16_params.pth')# 加载整个模型
loaded_model = torch.load('VGG16.pth')# 或者加载模型的参数
loaded_params = torch.load('VGG16_params.pth')# 如果只加载了模型的参数,需要先将参数加载到模型对象中
# 假设我们有一个新的模型实例
new_model = VGG16(num_classes=10)
new_model.load_state_dict(loaded_params)correct = 0
total = 0with torch.no_grad():for data in testloader:images, labels = dataimages, labels = images.to(device), labels.to(device)outputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()
print('Accuracy on 10,000 test images: ', 100 * (correct / total), '%')

通过测试集计算模型的准确率,我们得到约 86.5% 的结果。然而,需要注意以下两个问题:

  • CIFAR10 的挑战:CIFAR10 数据集中的图像分辨率较低(32x32),图像细节较少,并且部分类别之间存在一定的相似性(如狗与猫),这对模型的特征提取能力提出了较高的要求。
  • 过拟合风险:训练损失极低,但测试准确率未能达到 90% 以上,这可能表明模型存在过拟合现象,即模型在训练集上的表现远好于在测试集上的表现。

四、优化方向:如何让模型更上一层楼

1. 数据增强:对抗过拟合的 “核武器”

原代码未使用数据增强技术,为了提高模型的泛化能力,我们可以添加以下数据增强操作:

  • 随机裁剪与翻转:使用transforms.RandomCrop(32, padding = 4)transforms.RandomHorizontalFlip(),增加数据的多样性,使模型能够学习到更多不同视角和位置的特征。
  • 颜色扰动:通过transforms.ColorJitter(brightness = 0.1, contrast = 0.1, saturation = 0.1),增强模型对色彩变化的鲁棒性,使其能够适应不同光照和色彩条件下的图像。
  • Cutout/MixUp:采用随机遮挡图像区域(Cutout)或混合样本(MixUp)的方法,进一步提升模型的泛化能力。

2. 模型调整:更适配小数据集的设计

  • 使用预训练模型:可以将在 ImageNet 上预训练的 VGG16 模型权重迁移到 CIFAR10 任务中。但需要注意输入尺寸的差异(从 224 调整为 32),可以尝试冻结部分卷积层,只对后续层进行微调。
  • 轻量化改进:VGG16 模型的参数量较大(约 1.38 亿),对于 CIFAR10 这样的小数据集可能会导致过拟合。可以考虑改用更小的网络,如 VGG11、ResNet18,或者减少通道数(如将起始通道从 64 减少到 32)。
  • 添加 Dropout:在全连接层前插入nn.Dropout(0.5),抑制神经元之间的共适应现象,降低模型过拟合的风险。

3. 优化策略升级

  • 学习率策略:可以改用余弦退火(Cosine Annealing)或周期性学习率(CLR)策略,动态调整学习率,帮助模型逃离鞍点,提高收敛速度和性能。
  • 优化器选择:尝试使用 AdamW(结合权重衰减的 Adam)或 RMSprop 等优化器,这些优化器在处理稀疏梯度场景时可能更有效。
  • 混合精度训练:使用 PyTorch 的torch.cuda.amp模块进行混合精度训练,减少显存占用并加速训练过程,尤其适用于长周期的训练任务。

4. 训练技巧与调参

  • 早停(Early Stopping):监控验证集损失,若连续多个 epoch 验证集损失未提升,则提前终止训练,避免无效的训练过程。
  • 标签平滑(Label Smoothing):在损失函数中引入标签平滑技术,防止模型对单一类别过度自信,提高模型的泛化能力。
  • 调整批量大小:尝试使用更小的batch_size(如 64)以增加梯度更新的频率,或者使用更大的批量(如 256)以充分利用 GPU 的并行计算能力。

5. 测试阶段优化

  • 测试时增强(TTA):在测试阶段,对测试图像进行多尺度裁剪、翻转等操作,然后取预测结果的平均值,提升预测的鲁棒性。
  • 集成学习:训练多个不同初始化的 VGG 模型,通过投票或平均法融合这些模型的预测结果,降低模型的随机性影响,提高整体性能。

五、总结与实践建议

本次实战通过在 CIFAR10 数据集上训练 VGG16 模型,全面展示了深度学习从数据预处理到模型部署的完整流程。86.5% 的准确率仅仅是一个起点,通过采用数据增强、模型轻量化、优化策略调整等一系列优化手段,完全有能力将模型的准确率提升至 90% 以上(CIFAR10 的当前最优模型准确率可达 95% 以上)。

深度学习的学习过程需要理论与实践紧密结合,希望大家能够动手实践,亲自体验模型优化的过程。如果您需要完整代码或希望进行进一步的讨论,欢迎在评论区留言。

相关文章:

深度学习实战 04:卷积神经网络之 VGG16 复现三(训练)

在后续的系列文章中,我们将逐步深入探讨 VGG16 相关的核心内容,具体涵盖以下几个方面: 卷积原理篇:详细剖析 VGG 的 “堆叠小卷积核” 设计理念,深入解读为何 332 卷积操作等效于 55 卷积,以及 333 卷积操作…...

欧拉系统离线部署docker

https://www.cnblogs.com/hsh96/p/18150538 Docker 离线安装指南 本文介绍了如何在 Linux 系统上进行 Docker 的离线安装。首先,确保欧拉系统安装的是server版本,否则没有tar工具。 您需要下载 Docker 的离线安装包。您可以从以下链接获取所需的安装包&a…...

Java 中 final 与 static 的区别

Java 中 final 与 static 的区别 在 Java 中,final 和 static 是两个不同的关键字,它们的核心作用和不可变性特性有本质区别: 一、final 的核心作用 1. 变量(不可变引用) 不可重新赋值:final 修饰的变量…...

多模态实时交互边界的高效语音语言模型 VITA-Audio 介绍

介绍 VITA-Audio是由Zuwei Long等研究者提出的端到端大型语音语言模型,其核心目标是通过跨模态令牌生成技术,解决传统语音交互系统中首音频令牌生成延迟高的问题。该模型的创新点主要体现在: 低延迟:VITA-Audio 是首个能够在初次…...

LLM | 论文精读 | NAACL 2025 | Clarify When Necessary:教语言模型何时该“问一句”再答!

🔍 解读 NAACL 2025 重磅论文《Clarify When Necessary》:教语言模型何时该“问一句”再答! 🧩 一、现实问题:大模型“看不懂装懂”有多危险? 我们每天用的 ChatGPT、Claude 等大型语言模型(LL…...

MySQL 8.0 OCP 英文题库解析(七)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题51~60 试题51:…...

深度解析Vue项目Webpack打包分包策略 从基础配置到高级优化,全面掌握性能优化核心技巧

深度解析Vue项目Webpack打包分包策略 从基础配置到高级优化,全面掌握性能优化核心技巧 一、分包核心价值与基本原理 1.1 为什么需要分包 首屏加载优化:减少主包体积,提升TTI(Time to Interactive)缓存利用率提升&am…...

MySQL——基本查询内置函数

目录 CRUD Create Retrieve where order by limit Update Delete 去重操作 聚合函数 聚合统计 内置函数 日期函数 字符函数 数学函数 其它函数 实战OJ 批量插入数据 找出所有员工当前薪水salary情况 查找最晚入职员工的所有信息 查找入职员工时间升序排…...

实现图片自动压缩算法,canvas压缩图片方法

背景: 在使用某些支持webgl的图形库(eg:PIXI.js,fabric.js)场景中,如果加载的纹理超过webgl可处理的最大纹理限制,会导致渲染的纹理缺失,甚至无法显示。 方案 实现图片自动压缩算…...

零基础设计模式——创建型模式 - 单例模式

第二部分:创建型模式 - 单例模式 (Singleton Pattern) 欢迎来到创建型模式的第一站——单例模式!这是最简单也最常用的设计模式之一。 核心思想:关注对象的创建过程,将对象的创建与使用分离,降低系统的耦合度。 单例…...

数据挖掘:从数据堆里“淘金”,你的数据价值被挖掘了吗?

数据挖掘:从数据堆里“淘金”,你的数据价值被挖掘了吗? 在这个数据爆炸的时代,我们每天都在产生海量信息:社交媒体上的点赞、网购时的浏览记录,甚至是健身手环记录下的步数。这些数据本身可能看似杂乱无章…...

k8s1.27版本集群部署minio分布式

需求: 1.创建4个pv,一个pv一个minio-pod。使用sts动态分配pvc(根据存储类找到pv)。----持久化 2.暴露minio的9001端口。(nodeport)----管理界面 镜像:minio/minio:RELEASE.2023-03-20T20-16-18Z--->换国内源 说明…...

雷军:芯片,手机,平板,SUV一起发

大家好,我是小悟。 5月19日,雷军在微博上宣布,5月22日晚7点将举办小米战略新品发布会。 这场被官方称为“人车家全生态”战略升级的重要活动,一口气带来了小米手机SoC芯片“玄戒O1”、旗舰手机小米15S Pro、小米平板7 Ultra&…...

使用Dockerfile构建含私有Maven仓库依赖包的Java容器

背景 需要用JDBC方式访问ArgoDB星环提供了ArgoDB jar包应用将以Container的方式运行我希望打包成镜像之后&#xff0c;镜像启动就能测试连接是否成功连接URL串需要能够传递进去 失败的方案一&#xff1a;本地文件导入POM pom.xml 配置本地路径 <dependency><groupI…...

AI指令模板综述(Prompt Review)

文章目录 DeepSeek DeepSeek 参考&#xff1a;DeepSeek学术指令大全 找到有价值的研究方向 "作为我的学术研究助手&#xff0c;你需要基于以下要求为我生成5个具有学术价值的创新选题&#xff1a; 请聚焦于[具体研究领域&#xff0c;如’社交媒体用户行为’或’深度学习…...

软件架构之-论分布式架构设计及其实现

论分布式架构设计及其实现 摘要正文 摘要 2023年2月&#xff0c;本人所在集团公司承接了长三角地区某省渔船图纸电子化审查项目开发&#xff0c;该项目旨在为长三角地区渔船建造设计院、渔船审图机构提供一个便捷化的服务平台。在次项目中&#xff0c;我作为项目成员参与了整个…...

零售EDI:Belk Stores EDI需求分析

Belk Stores 成立于 1888 年&#xff0c;是美国历史最悠久的家族百货连锁品牌之一&#xff0c;总部位于北卡罗来纳州夏洛特市。作为美国东南部领先的零售企业&#xff0c;Belk 在16个州拥有近300家门店&#xff0c;主要经营服装、鞋履、美妆、家居用品等多个品类&#xff0c;服…...

LangChain4j入门(六)整合提示词(Prompt)

前言 提示词&#xff08;Prompt&#xff09;是用户输入给AI模型的一段文字或指令&#xff0c;用于引导模型生成特定类型的内容。通过提示词&#xff0c;用户可以告诉AI“做什么”、 “如何做”以及“输出格式”&#xff0c;从而在满足需求的同时最大程度减少无关信息的生成。有…...

【HarmonyOS 5】金融应用开发鸿蒙组件实践

【HarmonyOS 5】金融应用开发鸿蒙组件实践 一、鸿蒙生态观察 2024 年 1 月 18 日&#xff1a; 发布 原生鸿蒙操作系统星河版&#xff0c;面向开发者开放申请&#xff0c;余承东宣布鸿蒙生态设备数达 8 亿台&#xff1b;建设银行、邮储银行等完成鸿蒙原生应用 Beta 版本开发。 …...

cv2.VideoWriter_fourcc(*‘mp4v‘)生成的视频无法在浏览器展

看这个博主的博客&#xff0c;跟我碰到的问题的一致&#xff0c;都是使用AVC1写视频时报编码器不存在的异常&#xff0c;手动编译opencv-python或者使用conda install -c conda-forge opencv安装依赖即可。 博主博客&#xff1a;Python OpenCV生成视频无法浏览器播放问题说明及…...

MD编辑器推荐【Obsidian】含下载安装和实用教程

为什么推荐 Obsidian &#xff1f; 免费 &#xff08;Typora 开始收费了&#xff09;Typora 实现的功能&#xff0c;它都有&#xff01;代码块可一键复制 文件目录支持文件夹 大纲支持折叠、搜索 特色功能 – 白板 特色功能 – 关系图谱 下载 https://pan.baidu.com/s/1I1fSly…...

新书速览|GraphPad Prism图表可视化与统计数据分析:视频教学版

《GraphPad Prism图表可视化与统计数据分析:视频教学版 》 本书内容 《GraphPad Prism图表可视化与统计数据分析:视频教学版 》以GraphPad Prism 10为平台&#xff0c;讲述统计分析软件GraphPad Prism的具体应用方法。在介绍《GraphPad Prism图表可视化与统计数据分析:视频教学…...

波峰波谷策略

这是一个基于数据分布的峰度(kurtosis)和偏度(skewness)的交易策略。 当数据呈现趋势性,并且潜在趋势为正时,我们做多。 当数据呈现趋势性,并且潜在趋势为负时,我们做空。 当趋势发生反转后,我们平仓。 那么,我们如何确定趋势和趋势的强度呢?让我们先来复习一下峰…...

【综述】视频目标分割VOS

目录 1、Associating Objects with Transformers for Video Object Segmentation1&#xff09;背景知识2&#xff09;研究方法3&#xff09;实验结果4&#xff09;结论 2、Rethinking Space-Time Networks with Improved Memory Coverage for Efficient Video Object Segmentat…...

基于线性回归的数据预测

1. 自主选择一个公开回归任务数据集&#xff08;如房价预测、医疗数据、空气质量预测等&#xff0c;可Kaggle&#xff09;。 2. 数据预处理&#xff1a;完成标准化&#xff08;Normalization&#xff09;、特征选择或缺失值处理等步骤。 3. 使用线性回归模型进行建模。采用80…...

第5天-python饼图绘制

一、基础饼图绘制(Matplotlib) 1. 环境准备 python 复制 下载 pip install matplotlib numpy 2. 基础饼图代码 python 复制 下载 import matplotlib.pyplot as plt# 数据准备 labels = [1, 2, 3, 4] sizes = [30, 25, 15, 30] # 各部分占比(总和建议100) colors…...

c++学习方向选择说明

文章目录 前言一、什么样的人适合用c找编程相关工作二、c可以投递什么岗位三、应届生c怎么学才可以找到好工作那这样的话&#xff0c;校招生搞c应该怎么学才能凸显自己的优势呢&#xff1f;那有人就问了&#xff0c;那我应该学啥啊&#xff1f; 四、零基础学习c路线 前言 做了…...

采集需要登录网站的教程

有些网站需要用户登录才能显示相关信息&#xff0c;如果要采集这类网站&#xff0c;有以下几个方法&#xff1a; 1. 写发布模块来抓包获取post的数据&#xff1b; 2. 有些采集器内置浏览器获取这些信息&#xff0c;但是经常获取的不准确&#xff0c;可靠性太低&#xff1b; 3. …...

在hadoop中实现序列化与反序列化

在 Hadoop 分布式计算环境中&#xff0c;序列化与反序列化是数据处理的核心机制之一。由于 Hadoop 需要在集群节点间高效传输数据并进行分布式计算&#xff0c;其序列化框架不仅要支持对象的序列化与反序列化&#xff0c;还要满足高效、紧凑、可扩展等特殊需求。本文将深入探讨…...

数据结构*排序

排序的一些相关概念 稳定性 假设在待排序序列中&#xff0c;存在两个元素A和B&#xff0c;A和B的值相同。在排序后&#xff0c;A和B的相对位置没有变化&#xff0c;就说这排序是稳定的。反之不稳定。 内部排序与外部排序 内部排序&#xff1a;数据完全存储在内存中&#xf…...

新浪《经济新闻》丨珈和科技联合蒲江政府打造“数字茶园+智能工厂+文旅综合体“创新模式

5月14日&#xff0c;新浪网《经济新闻》频道专题报道珈和科技在第十四届四川国际茶业博览会上的精彩亮相&#xff0c;并深度聚焦我司以数字技术赋能川茶产业高质量发展创新技术路径&#xff0c;及在成都市“茶业建圈强链”主题推介会上&#xff0c;珈和科技与蒲江县人民政府就智…...

【Linux】第二十三章 控制启动过程

1. 请简要说明 RHEL9的启动过程。 &#xff08;1&#xff09;计算机通电。系统固件 (UEFI 或 BIOS) 开机自检 (POST)&#xff0c;并初始化部分硬件&#xff0c;然后&#xff0c;固件会寻找启动设备&#xff08;如硬盘、USB、网络等&#xff09;&#xff0c;并将控制权交给引导…...

深信服golang面经

for range 中赋值的变量&#xff0c;这个变量指向的是真实的地址吗&#xff0c;还是临时变量 不是真实地址&#xff0c;是临时变量 package mainimport "fmt"func main() {slice : []int{4, 2, 3}for _, v : range slice {fmt.Println(v, &v) // 这里的 v 是临…...

基于 Netty + SpringBoot + Vue 的高并发实时聊天系统设计与实现

一、系统架构设计 1.1 整体架构图 ------------------ WebSocket (wss) ------------------ Netty TCP ------------------ | Vue前端 | <-------------------------> | SpringBoot网关 | <------------------> | Netty服务集…...

根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能

代码如下&#xff1a; <el-date-picker v-model"value" type"monthrange" align"right" unlink-panels range-separator"至"start-placeholder"开始月份" end-placeholder"结束月份" :picker-options"pic…...

Spring Boot 使用 jasypt配置明文密码加密

引入依赖 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version> </dependency>添加配置 jasypt:encryptor:password: pssw0rd&Hubt2ec…...

ubuntu下docker安装mongodb-支持单副本集

1.mogodb支持事务的前提 1) MongoDB 版本&#xff1a;确保 MongoDB 版本大于或等于 4.0&#xff0c;因为事务支持是在 4.0 版本中引入的。 2) 副本集配置&#xff1a;MongoDB 必须以副本集&#xff08;Replica Set&#xff09;模式运行&#xff0c;即使是单节点副本集&#x…...

科技赋能,开启现代健康养生新潮流

在科技与生活深度融合的当下&#xff0c;健康养生也迎来了全新的打开方式。无需传统医学的介入&#xff0c;借助现代科学与智能设备&#xff0c;我们能以更高效、精准的方式守护健康。​ 饮食管理步入精准化时代。利用手机上的营养计算 APP&#xff0c;录入每日饮食&#xff0…...

《安徽日报》聚焦珈和科技AI创新:智慧虫情测报护航夏粮提质丰产

5月7日&#xff0c;《安徽日报》焦点新闻版块以《高科技助力田管&#xff0c;确保夏粮丰收——为4300多万亩小麦守好防线》为题&#xff0c;深度报道了农业科技在夏粮生产中的关键作用。其中&#xff0c;珈和科技自主研发的AI虫情测报一体机作为绿色防控、农业智慧化的标杆被重…...

企业级 Go 多版本环境部署指南-Ubuntu CentOS Rocky全兼容实践20250520

&#x1f6e0;️ 企业级 Go 多版本环境部署指南-Ubuntu / CentOS / Rocky 全兼容实践 兼顾 多版本管理、安全合规、最小权限原则与 CI/CD 可复现性&#xff0c;本指南以 Go 官方 toolchain 为主&#xff0c;结合 asdf 实现跨语言统一管理&#xff0c;并剔除已过时的 GVM。支持 …...

MCP 协议传输机制大变身:抛弃 SSE,投入 Streamable HTTP 的怀抱

在技术的江湖里&#xff0c;变革的浪潮总是一波接着一波。最近&#xff0c;模型上下文协议&#xff08;MCP&#xff09;的传输机制就搞出了大动静&#xff0c;决定和传统的服务器发送事件&#xff08;SSE&#xff09;说拜拜&#xff0c;转身拥抱 Streamable HTTP&#xff0c;这…...

Windows 上配置 Docker,Docker 的基本原理和用途,以及如何在 Docker 中运行程序

Windows 系统上的 Docker 安装与使用指南 1. Windows 上配置 Docker 检查系统要求&#xff1a;使用 64 位 Windows 10/11&#xff0c;BIOS 已启用硬件虚拟化&#xff08;VT-x/AMD-V&#xff09;。Windows 版本最好更新到 2004 及以上&#xff08;内部版本19041&#xff09;&am…...

CBCharacteristic:是「特征」还是「数据通道」?

目录 名词困惑&#xff1a;两种中文译法的由来官方定义 & 开发者视角乐高类比&#xff1a;文件夹与文件智能手表实例&#xff1a;Characteristic 长什么样&#xff1f;iOS 代码实战&#xff1a;读 / 写 / 订阅小结 & Best Practice 1. 名词困惑&#xff1a;为什么有两…...

【JavaEE】多线程

线程 在Java中&#xff0c;鼓励多线程编程。进程可以满足并发编程&#xff0c;但是效率不高&#xff08;创建、销毁、调度时间都比较长&#xff0c;这些都消耗在申请资源上了&#xff09;&#xff0c;而线程就不一样。 线程也叫“轻量级进程”&#xff0c;创建、销毁、调度都更…...

docker- Harbor 配置 HTTPS 协议的私有镜像仓库

Harbor通过配置 HTTPS 协议&#xff0c;可以确保镜像传输的安全性&#xff0c;防止数据被窃取或篡改。本文将详细介绍如何基于 Harbor 配置 HTTPS 协议的私有镜像仓库。 1.生成自建ca证书 [rootdocker01 ~]# mkdir -p /liux/softwares/harbor/certs/custom/{ca,server,client…...

[SpringBoot]Spring MVC(5.0)----留言板

Spring留言板实现 预期结果 可以发布并显示点击提交后&#xff0c;显示并清除输入框并且再次刷新后&#xff0c;不会清除下面的缓存 约定前后端交互接口 Ⅰ 发布留言 url : /message/publish . param(参数) : from,to,say . return : true / false . Ⅱ 查询留言 url : /messag…...

Jules 从私有预览阶段推向全球公测

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

vLLM框架高效原因分析

vLLM框架在模型推理中以高效出名&#xff0c;主要基于以下核心原理和技术优化&#xff0c;这些设计使其在处理大语言模型时显著提升性能&#xff1a; 一、PagedAttention&#xff1a;动态显存管理技术 vLLM的核心创新在于PagedAttention&#xff0c;灵感源自操作系统的虚拟内存…...

【Git】常用命令大全

以下是 Git 的常用命令大全&#xff0c;分为几个常见类别&#xff0c;便于理解和使用&#xff1a; 1. 初始化与克隆 初始化本地仓库&#xff1a;git init克隆远程仓库到本地&#xff1a;git clone <repository_url> 2. 添加与提交 添加指定文件到暂存区&#xff1a;git…...

pycharm无需科学上网工具下载插件的解决方案

以下是两种无需科学上网即可下载 PyCharm 插件的解决思路&#xff1a; 方法 1&#xff1a;设置 PyCharm 代理 打开 PyCharm选择菜单&#xff1a;File → Settings → Appearance & Behavior → System Settings → HTTP Proxy在代理设置中进行如下配置&#xff1a; 代理地…...