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

机器学习周报(12.2-12.8)

文章目录

    • 摘要
    • Abstract
  • Vision Transformer
    • 1 原理
    • 2 代码

摘要

本周学习了Vision Transformer (ViT) 的基本原理及其实现,并完成了基于PyTorch的模型训练、验证和预测任务。深入理解了ViT如何将图像分割成patch作为输入序列,并结合Transformer Encoder处理。通过迁移学习在花类数据集上训练模型,并验证了模型在预测任务中的优越性能。

Abstract

This week, I studied the fundamental principles and implementation of Vision Transformer (ViT) and completed model training, validation, and prediction tasks using PyTorch. I gained a deep understanding of how ViT splits an image into patches as input sequences and processes them using the Transformer Encoder. By leveraging transfer learning, I trained the model on a flower dataset and validated its superior performance in prediction tasks.

Vision Transformer

1 原理

  • 数据处理

我认为ViT的关键在于理解怎么将图片当作一个序列输入进模型之中。我们先看看ViT整体结构图,如下图所示

在这里插入图片描述
论文中提到将 224x224x3 的图像作为输入,将图像分为 16x16x3 大小的patch,也就是说将输入图像分为了 224 × 224 × 3 16 × 16 × 3 = 196 \frac{224×224×3}{16×16×3}=196 16×16×3224×224×3=196 个patch。其中每个patch拉直之后的维度为 16×16×3=768维,也就是Linear Projection of Flattened Patches层下面分割的小图像。

在具体实现中,使用卷积核大小为 16x16x3 、步距为16、卷积核个数为768的卷积层,就能将3维图像转换为Transformer所需要的输入token[组数,维度]。

  • 全连接层
    上述[196,768]的token将传入Linear Projection of Flattened Patches层,该层是 768x768 的全连接层,该层输出认为 196x768 。

  • 位置编码
    将经过全连接层后的输出进行位置编码,其位置编码和Transformer中的时序编码有异曲同工之妙,前者可以通过位置编码表示出token之间关于原输入图像的一些位置信息,后者可以表示输入先后的时序信息。
    该模型位置编码通过类似于坐标的形式表达,直接于输入相加,不改变维度大小。如下图所示:
    在这里插入图片描述

进行位置编码后,还需要加上一个特殊字符(最左输入0*),输入总组数从之前的196变为197,传入Transformer Encoder的token为[197,768]。

  • Transformer Encoder
    在这里插入图片描述
    ViT采用的是Transformer中编码器进行叠加,但其中的参数数量有所不同。
    经过位置编码和加入特殊字符的token[197,768]传入编码器,首先经过层归一化,再经过多头自注意力。这里的多头自注意力是采用12个头,也就是将768维分为12份,每份(Q、K、V)64维度,计算之后再进行合并为768维。

ViT中的编码器仍是采用残差连接,再经过一次层归一化后,就进入单个Transformer Encoder的最后一层MLP(多层感知机)。MLP将经过多头自注意力的输出维度升高4倍,即从768变为3072,最后再将维度降至768维

ViT中的编码器输入和输出都是768维,也就是在硬件运行的情况下一直叠加,论文中也是将该模块叠加了L块。

  • 输出
    ViT中的编码器输入和输出都是768维,也就是在硬件运行的情况下一直叠加,论文中也是将该模块叠加了L块。

在这里插入图片描述

最后,通过全连接层和softmax进行概率输出即可

2 代码

在理解完ViT的原理之后,我们来看看PyTorch代码如何实现。这里以ViT-base模型,输入图像 224x224x3,patch大小 16x16x3 为例

花类数据集:
https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgzy

训练模型代码如下,需要自行更改数据集路径和权重路径。

import os
import math
import argparseimport torch
import torch.optim as optim
import torch.optim.lr_scheduler as lr_scheduler
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformsfrom my_dataset import MyDataSet
from vit_model import vit_base_patch16_224_in21k as create_model
from utils import read_split_data, train_one_epoch, evaluatedef main(args):device = torch.device(args.device if torch.cuda.is_available() else "cpu")if os.path.exists("../weights") is False:os.makedirs("../weights")tb_writer = SummaryWriter()train_images_path, train_images_label, val_images_path, val_images_label = read_split_data(args.data_path)data_transform = {"train": transforms.Compose([transforms.RandomResizedCrop(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])]),"val": transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])}# 实例化训练数据集train_dataset = MyDataSet(images_path=train_images_path,images_class=train_images_label,transform=data_transform["train"])# 实例化验证数据集val_dataset = MyDataSet(images_path=val_images_path,images_class=val_images_label,transform=data_transform["val"])batch_size = args.batch_sizenw = min([os.cpu_count(), batch_size if batch_size > 1 else 0, 8])  # number of workersprint('Using {} dataloader workers every process'.format(nw))train_loader = torch.utils.data.DataLoader(train_dataset,batch_size=batch_size,shuffle=True,pin_memory=True,num_workers=nw,collate_fn=train_dataset.collate_fn)val_loader = torch.utils.data.DataLoader(val_dataset,batch_size=batch_size,shuffle=False,pin_memory=True,num_workers=nw,collate_fn=val_dataset.collate_fn)model = create_model(num_classes=args.num_classes, has_logits=False).to(device)if args.weights != "":assert os.path.exists(args.weights), "weights file: '{}' not exist.".format(args.weights)weights_dict = torch.load(args.weights, map_location=device)# 删除不需要的权重# del_keys = ['head.weight', 'head.bias'] if model.has_logits \#     else ['pre_logits.fc.weight', 'pre_logits.fc.bias', 'head.weight', 'head.bias']del_keys = ['head.weight', 'head.bias']for k in del_keys:del weights_dict[k]print(model.load_state_dict(weights_dict, strict=False))if args.freeze_layers:for name, para in model.named_parameters():# 除head, pre_logits外,其他权重全部冻结if "head" not in name and "pre_logits" not in name:para.requires_grad_(False)else:print("training {}".format(name))pg = [p for p in model.parameters() if p.requires_grad]optimizer = optim.SGD(pg, lr=args.lr, momentum=0.9, weight_decay=5E-5)# Scheduler https://arxiv.org/pdf/1812.01187.pdflf = lambda x: ((1 + math.cos(x * math.pi / args.epochs)) / 2) * (1 - args.lrf) + args.lrf  # cosinescheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)for epoch in range(args.epochs):# traintrain_loss, train_acc = train_one_epoch(model=model,optimizer=optimizer,data_loader=train_loader,device=device,epoch=epoch)scheduler.step()# validateval_loss, val_acc = evaluate(model=model,data_loader=val_loader,device=device,epoch=epoch)tags = ["train_loss", "train_acc", "val_loss", "val_acc", "learning_rate"]tb_writer.add_scalar(tags[0], train_loss, epoch)tb_writer.add_scalar(tags[1], train_acc, epoch)tb_writer.add_scalar(tags[2], val_loss, epoch)tb_writer.add_scalar(tags[3], val_acc, epoch)tb_writer.add_scalar(tags[4], optimizer.param_groups[0]["lr"], epoch)torch.save(model.state_dict(), "../weights/model-{}.pth".format(epoch))if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--num_classes', type=int, default=5)parser.add_argument('--epochs', type=int, default=10)parser.add_argument('--batch-size', type=int, default=8)parser.add_argument('--lr', type=float, default=0.001)parser.add_argument('--lrf', type=float, default=0.01)# 数据集所在根目录# https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgzparser.add_argument('--data_path', type=str, default='../data/flower_photos', help='path to dataset')parser.add_argument('--model-name', default='', help='create model name')# 预训练权重路径,如果不想载入就设置为空字符parser.add_argument('--weights', type=str, default='../weights/vit_base_patch16_224.pth', help='path to initial weights')# 是否冻结权重parser.add_argument('--freeze-layers', type=bool, default=True)parser.add_argument('--device', default='cuda:0', help='device id (i.e. 0 or 0,1 or cpu)')opt = parser.parse_args()main(opt)

训练结果如下:

在这里插入图片描述

因为是迁移学习的原因,只需要进行微调即可,所以9epoch之后准确率就达到97.9%了。

每训练一个epoch,就会将训练模型保存至weights文件夹,如下图所示

在这里插入图片描述

通过上述代码的训练之后,我们可以将保存的模型model-9.pth引入预测代码进行预测啦!需自行更改权重路径,以及需要测试的图片路径。

import os
import jsonimport torch
from PIL import Image
from torchvision import transforms
import matplotlib.pyplot as pltfrom vit_model import vit_base_patch16_224_in21k as create_modeldef main():device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")data_transform = transforms.Compose([transforms.Resize(254),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])# load imageimg_path = "../data/Image/flower.png"assert os.path.exists(img_path), "file: '{}' dose not exist.".format(img_path)img = Image.open(img_path)img2 = imgplt.imshow(img)plt.show()img = img.convert('RGB')img = data_transform(img)# expand batch dimensionimg = torch.unsqueeze(img, dim=0)  # [1, 3, 224, 224]# read class_indictjson_path = 'class_indices.json'assert os.path.exists(json_path), "file: '{}' dose not exist.".format(json_path)with open(json_path, "r") as f:class_indict = json.load(f)# create modelmodel = create_model(num_classes=5, has_logits=False).to(device)  # num_classes=5:表示模型将被训练来识别5个不同的类别;has_logits=False:模型不直接输出logits,在实际应用中,这通常意味着模型的输出层之后可能会跟随一个softmax激活函数# load model weightsmodel_weight_path = "../weights/model-9.pth"  # 采用第10轮训练的参数model.load_state_dict(torch.load(model_weight_path, map_location=device))model.eval()with torch.no_grad():# predict classoutput = torch.squeeze(model(img.to(device))).cpu()predict = torch.softmax(output, dim=0)predict_cla = torch.argmax(predict).numpy()print_res = "class: {}   prob: {:.3}".format(class_indict[str(predict_cla)], predict[predict_cla].numpy())plt.title(print_res)for i in range(len(predict)):print("class: {:10}   prob: {:.3}".format(class_indict[str(i)], predict[i].numpy()))plt.imshow(img2)plt.show()if __name__ == '__main__':main()

模型预测结果如下所示:
在这里插入图片描述

在这里插入图片描述

模型预测结果几乎100%为sunflowers

相关文章:

机器学习周报(12.2-12.8)

文章目录 摘要Abstract Vision Transformer1 原理2 代码 摘要 本周学习了Vision Transformer (ViT) 的基本原理及其实现,并完成了基于PyTorch的模型训练、验证和预测任务。深入理解了ViT如何将图像分割成patch作为输入序列,并结合Transformer Encoder处…...

【机器人】系统辨识之激励轨迹设计(傅里叶级数)

在机器人参数辨识中使用傅里叶级数,主要是为了生成一种激励轨迹,具有良好的数学特性,同时符合物理要求。傅里叶级数的特性使其在机器人动力学辨识的激励轨迹设计中非常常用。 1. 为什么需要激励轨迹? 激励轨迹的作用是通过驱动机…...

JVM八股文精简

目录 简述JVM类加载过程简述JVM中的类加载器简述双亲委派机制双亲委派机制的优点简述JVM内存模型简述程序计数器简述虚拟机栈简述本地方法栈简述JVM中的堆简述方法区简述运行时常量池简述Java创建对象的过程简述JVM给对象分配内存的策略Java对象内存分配是如何保证线程安全的如…...

PyTorch基本使用——张量的索引操作

在操作张量时,经常要去获取某些元素进行处理或者修改操作,在这里需要了解torch中的索引操作。 准备数据: data torch.randint(0,10,[4,5]) print(data--->,data)输出结果: data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …...

mysql集群MHA方式部署

1. 基本信息 部署机器角色部署路径192.168.242.71MySQL-Mater MHA-NodeMySQL: /alidata1/mysql-8.0.28192.168.242.72MySQL-Slave MHA-NodeMHA-Node: /alidata1/admin/tools/mha4mysql-node-0.58192.168.242.73MySQL-Slave MHA-Node192.168.242.74MHA-ManagerMHA-Manager: …...

Spring Boot中实现JPA多数据源配置指南

本文还有配套的精品资源,点击获取 简介:本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始,到配置数据源、创建DataSource bean、定义实体和Repository,最后到配置事务管理器和使用多数据…...

【计算机网络】实验12:网际控制报文协议ICMP的应用

实验12 网际控制报文协议ICMP的应用 一、实验目的 验证ping命令和tracert命令的工作原理。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑并进行信息标注,将所需要配置的IP地址写在对应的主机或者路由器旁边,如图1所示。 图…...

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…...

使用Redis的Bitmap实现签到功能

1.基础签到实现 1.1代码如下Service Slf4j public class SignInService {Autowiredprivate StringRedisTemplate redisTemplate;private static final String SIGN_KEY_PREFIX "sign:";/*** 用户签到* param userId 用户ID* param date 签到日期*/public boolean s…...

OpenCV 图像基本操作

OpenCV快速通关 第一章:OpenCV 简介与环境搭建 第二章:OpenCV 图像基本操作 OpenCV 图像基本操作 OpenCV快速通关第二章:OpenCV 图像基本操作一、相关结构体与函数介绍(一)cv::Mat 结构体(二)c…...

SpringBoot3+Micormeter监控应用指标

监控内容简介 SpringBoot3项目监控服务 ,可以使用Micormeter度量指标库,帮助我们监控应用程序的度量指标,并将其发送到Prometheus中并用Grafana展示。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。 micromete…...

Leetcode打卡:变为棋盘

执行结果:通过 题目:782 变为棋盘 一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动,你能交换任意两列或是两行的位置。 返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换,输出 -1。 “棋盘…...

遣其欲,而心自静 -- 33DAI

显然,死做枚举只能的50分。 错了4次总算对了。 大体思路: 因题目说只有两个因数,那么有两种情况: 1:两个质数相乘,如:3*515 5*745 等(不包括5*525 或5*315 重复计算\ 因为3*5算了…...

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品,比如电脑,鼠标,键盘,杯子,行李箱,双肩包,床,椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...

鸿蒙NEXT元服务:静态卡片

【引言】 最近上线的鸿蒙NEXT元服务受到了一些用户的反馈,指出其缺乏一个直观的入口。为了解决这个问题并提供类似传统应用程序的桌面快捷方式体验,决定通过添加静态卡片功能来让用户能够直接从桌面访问元服务。本文将详细介绍如何实现这一功能。 【参考…...

vue3父子组件通信

一般常用有6种方式: 使用 props 传递数据:父组件通过 props 传递数据给子组件,子组件通过 defineProps 获取父组件定义的数据。使用 v-model 语法糖:父组件通过 v-model="abc" 传递数据,并监听子组件的更新事件,子组件:通过 defineEmits 获取父传入的属性的更…...

2024年认证杯SPSSPRO杯数学建模D题(第一阶段)AI绘画带来的挑战解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现: 2023 年开年,ChatGPT 作为一款聊天型AI工具,成为了超越疫情的热门词条;而在AI的另一个分支——绘图领域,一款名为Midjourney(MJ&#xff…...

虚幻引擎---材质篇

一、基础知识 虚幻引擎中的材质(Materials) 定义了场景中对象的表面属性,包括颜色、金属度、粗糙度、透明度等等;可以在材质编辑器中可视化地创建和编辑材质;虚幻引擎的渲染管线的着色器是用高级着色语言(…...

【Linux基础】yum 与 vim 的操作

目录 Linux 应用商店——yum yum和yum源是什么 关于镜像的简单理解 yum 的基本操作 yum的安装 yum install 命令 yum查看软件包 yum list 命令 yum的卸载 yum remove 命令 关于 rzsz 软件 安装 rzsz 软件: rz 命令 sz 命令 yum 源拓展 Linux 编辑器…...

一句话木马

作用&#xff1a; 一句话木马的作用主要是利用计算机系统或网络协议的安全漏洞&#xff0c;以实现未经授权访问、数据窃取或其他恶意目的。 木马举例&#xff1a; 1.PHP <?php eval($_POST[attack]);?> 解释 • <?php ... ?> 是 PHP 代码的开始和结束标记…...

给建筑物“穿毛衣”:AI绘图新玩法

随着气温的骤降&#xff0c;我们不仅感受到了自然界的寒冷&#xff0c;甚至连城市的建筑物似乎也在寒风中“颤抖”。在这样的背景下&#xff0c;一种新颖的AI绘图玩法——给建筑“穿毛衣”在网络上迅速走红。本文将详细介绍这一创意玩法&#xff0c;并提供手把手的教学指导。 A…...

【Qt】Qt Creator项目文件(.pro 文件)构建指令学习

文章目录 1. DESTDIR作用&#xff1a;实例&#xff1a; 2. INCLUDEPATH作用&#xff1a;实例&#xff1a; 3. LIBS作用&#xff1a;用法&#xff1a;实例&#xff1a; 4. TEMPLATE作用&#xff1a;实例&#xff1a; 5. OTHER_FILES作用&#xff1a;实例&#xff1a;其它说明 6.…...

突破!自然语言强化学习(NLRL):一个可处理语言反馈的强化学习框架

本论文由伦敦大学学院、上海交通大学、布朗大学、布里斯托大学、新加坡国立大学以及萨里大学的研究者合作完成。 冯熙栋是论文第一作者&#xff0c;即将毕业于伦敦大学学院。目前是Google DeepMind的Research Scientist&#xff0c;主要研究方向包括强化学习与生成模型。刘博是…...

core Webapi jwt 认证

core cookie 验证 Web API Jwt 》》》》用户信息 namespace WebAPI001.Coms {public class Account{public string UserName { get; set; }public string UserPassword { get; set; }public string UserRole { get; set; }} }》》》获取jwt类 using Microsoft.AspNetCore.Mvc…...

【Springboot知识】springboot基础-事件

文章目录 简介一、事件类型二、事件处理机制三、自定义事件和监听器四、异步事件处理五、条件事件监听 如何使用1. 自定义事件2. 发布事件3. 监听事件4. 测试事件机制 ApplicationEventPublisher接口使用的设计模式 简介 在Spring Boot中&#xff0c;事件机制是一种基于观察者…...

经典视觉神经网络1 CNN

一、概述 输入的图像都很大&#xff0c;使用全连接网络的话&#xff0c;计算的代价较高&#xff0c;图像也很难保留原本特征。 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…...

解决跨域问题方案

跨域问题在前后端分离架构下尤为常见&#xff0c;是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度&#xff0c;帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...

【python自动化五】接口自动化基础--requests的使用

python的接口请求可以用requests库&#xff0c;这个介绍就不多说了&#xff0c;网上说得很详细。 接下来直接记录下如何使用&#xff08;当然也不限于自动化的使用&#xff09; 1.安装requests requests也需要安装一下 pip install requests2.requests请求 1.常用的请求方法…...

文本三剑客——grep命令

介绍 作用 Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 常用选项 -i&#xff1a;忽略大小写进行匹配。-v&#xff1a;反向查找&#xff0c;只打印不匹配的行。-n&#xff1a;显示匹配行的行号。-r&#xff1a;递归查找子目录…...

ASP 实例:深入解析与实战应用

ASP 实例&#xff1a;深入解析与实战应用 引言 ASP&#xff08;Active Server Pages&#xff09;是一种由微软开发的服务器端脚本环境&#xff0c;用于动态网页设计和开发。它允许开发者创建和运行动态交互性网页&#xff0c;如访问数据库、发送电子邮件等。本文将深入探讨AS…...

文件的操作

什么是文件 如何是数据持久化——保存在硬盘上(文件&#xff0c;数据库)磁盘上的文件是文件在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件程序文件&#xff0c;比如源文件&#xff08;.c文件&#xff09;读a文件写到b文件里&#xff0c;此时a…...

【简单谈谈UCIE PHY LSM链路训练】

UCIE PHY LSM链路训练 1 UCIE PHY LSM1.1 RESET1.2 SBINT1.3 MBINT1.3.1 MBINT.PARAM1.3.2 MBINIT.CAL1.3.3 MBINIT.REPAIRCLK1.3.4 MBINIT.REPAIRVAL1.3.5 MBINIT.REVERSALMB1.3.6 MBINIT.REPAIRMB 1.4 MBTRAIN1.5 LINKINIT1.6 ACTIVE1.7 L1/L21.8 PHY.RETRAIN1.9 TRAIN.ERROR…...

数学二常用公式(高等数学+线性代数)

目录 高等数学第一章 函数、极限和连续第二章 一元函数微分学第三章 一元函数积分学第四章 多元函数微分学第五章 多元函数积分学第六章 常微分方程 线性代数线性代数篇章涉及的知识内容及常用公式第一章 行列式第二章 矩阵第三章 向量第四章 线性方程组第五章 矩阵的相似化简第…...

【Java计算机毕业设计】Springboot+vue动物保护协会管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…...

鸿蒙面试---1208

HarmonyOS 三大技术理念 分布式架构&#xff1a;HarmonyOS 的分布式架构使得设备之间能够无缝协同工作。例如&#xff0c;它允许用户在不同的智能设备&#xff08;如手机、平板、智能手表等&#xff09;之间共享数据和功能。比如&#xff0c;用户可以在手机上开始编辑文档&…...

【论文阅读】一名系统研究者的攀登之路

作者&#xff1a;陈海波 陈海波是操作系统、系统结构、并行与分布式系统方向大牛&#xff0c;上海交通大学大牛团队 学习体会&#xff1a; 计算机系统论文准备周期较长&#xff0c;十有八九都是在解决新问题的路上~ 因此学习大佬的学习经验&#xff0c;少踩坑&#xff0c;把主…...

MySQL 索引(B+树)详解

MySQL 索引&#xff08;B树&#xff09;详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…...

【不稳定的BUG】__scrt_is_managed_app()中断

【不稳定的BUG】__scrt_is_managed_app函数中断 参考问题详细的情况临时解决方案 参考 发现出现同样问题的文章: 代码运行完所有功能&#xff0c;仍然会中断 问题详细的情况 if (!__scrt_is_managed_app())exit(main_result);这里触发了一个断点很奇怪,这中断就发生了一次,代…...

护网蓝队日志分析

Windows日志分析 一、事件查看器 在「事件查看器」中&#xff0c;可以查看系统中记录的所有事件日志。操作步骤如下&#xff1a; 1、打开 Windows 事件查看器 1、使用Windows R快捷键打开「运行」对话框&#xff0c;输入eventvwr.msc&#xff0c;然后按回车键打开事件查看…...

滤波器设计(八)-McClellan-Parks design algorithm

步骤 Initialization: Choose an extremal set of frequences {ωi(0)}.Finite Set Approximation: Calculate the best Chebyshev approximation on the present extremal set, giving a value δ(m) for the min-max error on the present extremal set.Interpolation: Calc…...

ElasticSearch常见的索引_集群的备份与恢复方案

方案一&#xff1a;使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移&#xff0c;包括全量、增量备份和恢复。 方案二&#xff1a;通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移&#xff0c;或者跨集…...

C#对Excel表csv文件的读写操作

C#对Excel表csv文件的读写 一、变量定义二、加载主窗口三、创建表头四、向表中添加数据五、从表中读取数据六、单击按钮向表中添加数据七、测试验证 一、变量定义 #region 变量定义 private string CurAppExeDir System.AppDomain.CurrentDomain.BaseDirectory; private strin…...

【MySQL】mysql服务器架构

目录 1、背景2、mysql服务器架构解释3、总结 1、背景 简单理解一下mysql的服务器架构。 2、mysql服务器架构解释 mysql的架构图如下&#xff1a; 主要分为三部分&#xff1a;客户端、服务端、存储引擎。接下来我们来解释一下各个部分&#xff1a; 客户端 用来连接mysql服务…...

Vue Web开发(三)

1. 添加el-menu样式 将Home.vue文件重新命名为Main.vue文件&#xff0c;本节涉及新的home目录和User目录下的index.js文件&#xff0c;因为侧边导航栏Aside和顶部Header是在每一个页面都存在的&#xff0c;所以重新命名为Main&#xff0c;而home文件夹下的index.js则对应系统首…...

Java项目实战II基于微信小程序的小区租拼车管理信息系统 (开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速&#xff0c;小区居民对于出行方…...

云安全:云计算安全

目录 云安全的定义和重要性 云安全的关键组成部分 云安全技术实现 云安全最佳实践 云安全的定义和重要性 云安全是指在云计算环境中保护数据、应用程序和相关服务不受威胁的一系列策略、技术和控制措施。随着云计算的快速发展&#xff0c;云安全已成为企业和个人用户最关心…...

git clone加速(亲测好用)

用公司网git clone特别卡&#xff0c;本以为宿舍网会好一点&#xff0c;回来下的时候也只有几十kb. 然后找到了一种方法&#xff0c;就是在原始下载命令前加一个gitclone 比如 git clone https://github.com/infiniflow/ragflow.git替换成 git clone https://gitclone.com/gi…...

Python 网络爬虫进阶:突破数据采集的边界

在成功踏入 Python 网络爬虫的入门之境后&#xff0c;我们犹如初窥宝藏的探险家&#xff0c;领略到了数据采集世界的奇妙与潜力。而此刻&#xff0c;进阶之路在脚下徐徐展开&#xff0c;它将引领我们深入这片领域的更深处&#xff0c;挖掘出更为强大和精妙的爬虫技艺&#xff0…...

【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义

文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代&#xff0c;安全问题已成为技术领域不可忽视的…...

[论文解读]Street Gaussians: Modeling Dynamic Urban Scenes with Gaussian Splatting

Street Gaussians是年初的一篇动态场景重建论文&#xff0c; 在当时是做到了SOTA&#xff0c;至今为止很多自动驾驶或者动态场景重建的文章都会将Street Gaussians作为实验的比较对象&#xff0c;这也表明了这篇文章的重要性&#xff0c;今天就一起来看看这篇文章&#xff1b; …...