【pytorch学习】土堆pytorch笔记1
学习参考
仓库
https://github.com/xiaotudui/pytorch-tutorialhttps://github.com/xiaotudui/pytorch-tutorial
https://github.com/AccumulateMore/CV
参考博客
https://blog.csdn.net/weixin_44216612/article/details/124203730?
https://www.morinha.cc/posts/courses/pytorch-%E5%B0%8F%E5%9C%9F%E5%A0%86/
只做一些必要的记录,很多直接看的博客。
P3两大法宝
- dir():打开,看见里面有多少分区、多少工具。
- help():说明书。
在conda环境里,输入jupyter notebook,打开jupyter
import torch
print(torch.cuda.is_available())
help(torch.cuda.is_available) # 查看 torch.cuda.is_available 的用法
dir(torch) # 查看torch包中有哪些区、有哪些工具
help代码结果:
Help on function is_available in module torch.cuda:
is_available() -> boolReturns a bool indicating if CUDA is currently available.
P5加载数据
Pytorch中加载数据需要Dataset、Dataloader。
- Dataset提供一种方式去获取每个数据及其对应的label,告诉我们总共有多少个数据。
- Dataloader为后面的网络提供不同的数据形式,它将一批一批数据进行一个打包。
用help查看Dataset信息
from torch.utils.data import Dataset
help(Dataset)
同样可以在pycharm里按ctrl点击进去查看。
Dataset、Dataloader大概的作用
Pytorch中加载数据需要Dataset、Dataloader。
- Dataset提供一种方式去获取每个数据及其对应的label,告诉我们总共有多少个数据。
- Dataloader为后面的网络提供不同的数据形式,它将一批一批数据进行一个打包
使用Dataset
导入Dataset类
from torch.utils.data import Dataset"""
utils 即工具的意思,从torch这个大工具箱中挑选出的实用工具区
data 从这个工具区中挑选出的数据有关工具前面已经介绍了如何查看帮助,可以查到Dataset的用法
①应该继承 `Dataset` 这个抽象类
②应该重写 `__getitem__` 和 `__len__` 方法
"""
PIL的一些操作(读取图片)
读取图片和显示
from PIL import Imageimg=Image.open(img_path)
img.show()
文件操作(路径、目录)
列出目录下的文件,路径拼接
import os
# r防止转义字符生效
dir_path=r"D:\FDownload\hymenoptera_data\train\ants"# 返回目录下一个包含这些文件和文件夹名称的列表,可以用[索引]访问
img_path_list=os.listdir(dir_path)# 在init里截取的语句
os.path.join(self.root_dir, self.label_dir)
P7 tensorBoard
使用SummaryWriter类的方法
from torch.utils.tensorboard import SummaryWriter"""
SummaryWriter类创建一个事件文件,在给定的目录中添加摘要和事件参数1 存放日志的文件夹名本节视频只用到领个方法add_image() 在事件文件中添加图片add_scalar() 在TensorBoard中添加标量数据该方法可以用来添加训练过程中的损失值、准确率等指标,以便于在TensorBoard中进行可视化和比较
"""
SummaryWriter
是 PyTorch 中用于记录训练过程中的日志信息的工具,通常用于与 TensorBoard 配合使用。add_scalar
方法用于记录标量值(如损失函数值、准确率等)到日志中。以下是 add_scalar
方法的详细用法和示例。
方法签名
add_scalar(tag, scalar_value, global_step=None, walltime=None)
tag
:字符串,用于标识标量值的名称(如'Loss/train'
或'Accuracy/test'
)。scalar_value
:标量值,可以是 Python 的数字类型(如int
、float
)或 PyTorch 的张量。global_step
:可选参数,表示当前的全局步数(如训练的轮数或批次数)。walltime
:可选参数,表示事件发生的时间,以秒为单位。
示例用法
记录训练损失
from torch.utils.tensorboard import SummaryWriter# 创建一个 SummaryWriter 实例
writer = SummaryWriter(log_dir='runs/experiment_1')# 假设你有一个训练循环
for epoch in range(num_epochs):train_loss = ... # 计算训练损失writer.add_scalar('Loss/train', train_loss, global_step=epoch)
记录测试准确率
test_accuracy = ... # 计算测试准确率
writer.add_scalar('Accuracy/test', test_accuracy, global_step=epoch)
记录多个标量
writer.add_scalar('Loss/train', train_loss, global_step=epoch)
writer.add_scalar('Loss/test', test_loss, global_step=epoch)
writer.add_scalar('Accuracy/train', train_accuracy, global_step=epoch)
writer.add_scalar('Accuracy/test', test_accuracy, global_step=epoch)
在 TensorBoard 中查看结果
-
启动 TensorBoard:
tensorboard --logdir=runs/experiment_1
-
打开浏览器,访问
http://localhost:6006
,即可查看记录的标量值。
注意事项
-
日志目录:
log_dir
是日志文件的保存路径。如果路径不存在,SummaryWriter
会自动创建。- 可以通过
tensorboard --logdir
指定日志目录来查看多个实验的结果。
-
全局步数:
global_step
用于记录当前的训练进度。通常设置为训练的轮数或批次数。
-
性能影响:
SummaryWriter
会对性能产生一定影响,尤其是在频繁写入日志时。可以通过减少写入频率来优化性能。
总结
SummaryWriter
的 add_scalar
方法用于记录训练过程中的标量值,如损失函数值和准确率。通过将这些值记录到日志中,可以使用 TensorBoard 可视化训练过程,帮助分析模型的性能和调试训练过程。
使用一下「tensorboard」,同时查看生成的事件文件
from torch.utils.tensorboard import SummaryWriter
# 传入路径参数"logs"
writer = SummaryWriter("logs") # add_scalar(
# tag, 相当于标题
# scalar_value, 相当于y轴
# global_step=None, 相当于 x轴
# )
# y = 2x
# 同一个图像标题下,重复修改y值会导致,新图会包含之前的旧图
for i in range(100): writer.add_scalar("y = 2x", 2*i, i)
writer.close()
# 查看日志的命令
# logdir=事件文件所在的 文件夹名
tensorboard --logdir=logs# 可以修改端口,改成自己的路径
tensorboard --logdir=logs --port=6007tensorboard --logdir=learn_pytorch/logs --port=6007
添加图片
添加图片, 方便观察训练过程的不同阶段的输出
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as npwriter = SummaryWriter("logs")# 第1步
# image_path = "data/train/ants_image/0013035.jpg"
# 第2步
image_path = "data/train/bees_image/16838648_415acd9e3f.jpg"img_PIL = Image.open(image_path)
# 需要numpy.array类型的参数
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)# 从PIL到Numpy,需要在add_image()中指定图像的每一维的含义,需要指定高度宽度通道数的顺序
writer.add_image("test", img_array, global_step=2, dataformats="HWC")writer.close()
P9 transforms结构及用法
什么是transforms?
常用的图像预处理方法 ,一般用于转换图片格式
有多个图片处理方法,如:
ToTensor()对象可传入两种图片格式:
- PIL:用PIL的Image工具打开
- numpy:用OpenCV打开
transforms该如何使用?
首先创建一个具体的工具(如ToTensor工具,相当于创建类对象):tool = transforms.ToTensor()
然后给工具传入参数(传入图片):result = tool(input)
最后得到tensor类型的图片
为什么我们需要Tensor数据类型?
tensor类型中的很多属性我们都需要在神经网络中用到,如反向传播、梯度等
所以我们必定要用到transforms将数据转换为tensor类型,然后进行训练
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms img_path = "data/train/ants_image/0013035.jpg"
img = Image.open(img_path)
print(img) # 使用transforms
"""
ToTensor() 可传入`PIL Image` 和 `numpy.ndarray` 两种图片格式 PIL Image:即用PIL的Image工具打开图像的格式 numpy.ndarray:即用OpenCV打开图像的格式(所以一般用这种方式打开,不用再转换图像了)
"""
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img) writer = SummaryWriter("logs")
writer.add_image("Tensor_img", tensor_img, 0)
writer.close()
了解__call__函数
transforms里有一个call函数,用下面的一段代码来说明其使用方法:
直接通过**对象(参数)**来使用
# __call__ 类似「类的有参构造」,可看作为「对象-有参构造」
# 测试
class Person: def __call__(self, name): print("__call__"+" Hello "+name) def hello(self, name): print("Hello "+name) person = Person()
person("zhangsan")person.hello("lisi")
P13常用transfroms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("D:\\FDownload\\hymenoptera_data\\train\\ants\\0013035.jpg")
# 打印后得知,图像为RGB三通道
print(img)# 01 transforms.ToTensor()
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor[0][0][0]) # 当使用transforms.ToTensor()将PIL图像转换为张量时,生成的张量维度遵循 (Channels, Height, Width) 格式
writer.add_image("ToTensor", img_tensor, 0)# 02 transforms.Normalize()
# output[channel] = (input[channel] - mean[channel]) / std[channel]
trans_norm = transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 0)# 03 Resize
# 图像为PIL,经过Resize后,仍为PIL
trans_resize = transforms.Resize((512, 512)) # 如果参数是一个int数,调整尺寸,短的那一边和参数一样,另一个进行等比例调整
img_resize = trans_resize(img)
# 将PIL转为Tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)# 04 Compose 将几个转换组合在一起,先resize,再tensor
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 0)# 05 RandomCrop
trans_random = transforms.RandomCrop(512)
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):img_crop = trans_compose_2(img)writer.add_image("RandomCrop", img_crop, i)writer.close()
dataloader
Dataloader():
概念:是一个迭代器,方便我们去多线程地读取数据,并且可以实现batch以及shuffle的读取等
用法:
test_loader = DataLoader(dataset=test_data, batch_size=4, shuffle=True, num_workers=0, drop_last=True)
如上,test_loader 就是我们生成的数据迭代器,
即加载test_data数据集,每次打包四个数据,打包成imgs和targets,
shuffle表示每次迭代完之后,下次迭代是否打乱顺序
drop_list 表示是否删除非完整页的结尾数据
完整参数参考官方文档。
P16 神经网络的基本骨架–nn.Module的使用
- 注:nn=neural network
module
torch.nn是非常常用的包,其中torch.container中的 「Module」 是所有神经网络的基类
自己定义的模型需要实现「Module」的__init__和forward函数
一个nn.module可以视为一个块。所有的module包含两个主要函数:
init函数:在里边定义一些需要的类或参数。包括网络层forward函数:做最终的计算和输出,其形参就是模型(块)的输入。
import torch
from torch import nnclass Lana(nn.Module):# ctrl+ o 可以找到有哪些方法要重写def __init__(self) -> None:super().__init__()def forward(self,input):output = input + 1return outputlana=Lana()
x=torch.tensor(1.0)
print(x)
output = lana(x)
print(output)
相关文章:
【pytorch学习】土堆pytorch笔记1
学习参考 仓库 https://github.com/xiaotudui/pytorch-tutorialhttps://github.com/xiaotudui/pytorch-tutorial https://github.com/AccumulateMore/CV 参考博客 https://blog.csdn.net/weixin_44216612/article/details/124203730? https://www.morinha.cc/posts/cours…...
使用Python+OpenCV将多级嵌套文件夹下的视频文件抽帧
使用PythonOpenCV将多级嵌套文件夹下的视频文件抽帧 import os import cv2 import time# 存放视频文件的多层嵌套文件夹路径 videoPath D:\\videos\\ # 保存抽帧的图片的文件夹路径 savePath D:\\images\\if not os.path.exists(savePath):os.mkdir(savePath) video_num 0f…...
ASP.Net Web Api如何更改URL
1.找到appsettings.json 修改如下: 主要为urls的修改填本机私有地址即可 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": &q…...
毕业论文设计基本内容和要求:
毕业设计基本内容和要求: 研究内容 调查了解LAMP架构和PHP开发; 学习百度旅游调用的其他产品线服务并熟悉请求接口; 学习社区业务层规范; 设计并实现旅游主要模块; 技术指标 熟悉企业中流程运转的方式,…...
XML内容解析成实体类
XML解析成实体类 解析方法实体类测试 说明:直接上干货,不废话 解析方法 public static List<PlatJuMinBaoXian> parse(String xmlString) {List<PlatJuMinBaoXian> result new ArrayList<>();try {// 创建 DocumentBuilderDocumentB…...
推公式——耍杂技的牛
由图可知,只要存在一个逆序,把他们交换一下,最大风险值就会降低,答案更优,因此最优解是按照wisi从小到大升序排列,顺次计算每头牛的危险系数,最大值即是答案。 #include <iostream> #inc…...
Vue指令详解:从入门到精通
前言 Vue.js作为当下最流行的前端框架之一,其指令系统是Vue最核心的特性之一。指令是Vue模板中带有v-前缀的特殊属性,它们为HTML元素添加了特殊的响应式行为。本文将全面介绍Vue的各种指令及其用法。 一、Vue指令概述 Vue指令是带有v-前缀的特殊属性&…...
准确--CentOS 7 配置 Chrony 同步阿里云 NTP 时间服务器及手动同步指南
本文档介绍如何在 CentOS 7 系统上配置 chrony 服务,使其与阿里云 NTP 时间服务器保持时间同步,并说明如何在需要时手动触发一次立即同步。 前提条件: 拥有一台 CentOS 7 服务器。拥有 root 权限或可以使用 sudo 命令。服务器可以访问互联网 (使用公共…...
CLIP | 训练过程中图像特征和文本特征的在嵌入空间中的对齐(两个投影矩阵的学习)
在多模态学习(Multimodal Learning)中,投影矩阵 W i W_i Wi 和 W t W_t Wt 是通过训练过程学习得到的。它们的作用是将图像特征 I f I_f If 和文本特征 T f T_f Tf 映射到一个共享的嵌入空间(embedding space…...
Spring中配置 Bean 的两种方式:XML 配置 和 Java 配置类
在 Spring 框架中,配置 Bean 的方式主要有两种:XML 配置 和 Java 配置类。这两种方式都可以实现将对象注册到 Spring 容器中,并通过依赖注入进行管理。本文将详细介绍这两种配置方式的步骤,并提供相应的代码示例。 1. 使用 XML 配置的方式 步骤 创建 Spring 配置文件 创建…...
STM32 外部中断
引言:嵌入式系统中的中断革命 在嵌入式系统开发领域,中断机制堪称现代微控制器的"神经系统"。它通过高效的异步事件处理机制,彻底改变了传统轮询式系统资源利用率低下的局面。STM32作为业界领先的ARM Cortex-M系列微控制器&#x…...
4.22学习总结
开始写有关图的算法 图的一些基本概念,图的存储主要以 邻接矩阵,邻接表(数组链表的实现方式)的方式存储 邻接矩阵的优点: 表达方式简单,易于理解检查任意两个顶点间是否存在边的操作非常快适合稠密图&a…...
list底层原理
一.结构体的构建 这个用结构体更好,因为我们需要不断的访问节点,类中的成员函数一般都是私有的,需要还用友元函数什么的。 这个是我们来实现的类,我们实现的是双向带头循环链表,这个是实用性最高的一个链表的形式。 这…...
python+selenium+pytest自动化测试chrome driver版本下载
chrome浏览器chromedriver版本下载地址 https://googlechromelabs.github.io/chrome-for-testing/#stable...
发布一个npm包,更新包,删除包
发布一个npm包,更新包,删除包 如何将自己的项目 发布为一个 npm 包,并掌握 更新 和 删除 的操作流程。 🚀 一、发布一个 npm 包的完整流程 ✅ 1. 注册并登录 npm 账号 如果还没有账号,先注册: 官网注册&…...
代码随想录训练营38天 || 322. 零钱兑换 279. 完全平方数 139. 单词拆分
322. 零钱兑换 思路: 动规5部曲: 1.确定dp数组以及下标的含义: dp数组表示能凑出零钱的最少硬币数,下标表示要兑换的零钱 2.确定递推公式: j为背包容量,i为物品的下标 dp[ j ] min(dp[ j -coins[ i…...
(最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题)
(最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题) 本套题目为硬件通用题目,适合多个岗位方向,如下 **岗位——硬件技术工程师 岗位意向…...
IOT项目——DIY Weather Station With ESP32
开源项目:ESP32 气象站 作者:GiovanniAggiustatutto 原文链接: ESP32 气象站 温度设备塔风向标风速计雨量计框架电子元件和压力传感器家庭助理配置及应用 气象站测量温度、湿度、气压、风速和风向以及降雨量。所有数据均由 ESP32收集…...
表格识别版面还原分析-GO语言集成-表格文字识别接口
数据驱动的时代,高效处理和分析各类文档中的信息变得尤为重要。无论是金融服务中的报表分析,制造与物流行业的库存管理,还是医疗卫生领域的病历记录,快速准确地将纸质或电子表格中的数据转换为可编辑、保存的电子数据成为提升工作…...
文件上传漏洞3
1. 例题:文件上传限制 1)上传漏洞靶场介绍 项目名称: upload-labs开发语言: 使用PHP语言编写功能定位: 专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场关卡数量: 目前共21关,每关包含不同上传方式注意事项: 每关没有固定通关方法,不要自限…...
一洽智能硬件行业解决方案探索与实践
一、智能硬件行业发展现状剖析 在数字化浪潮推动下,智能硬件行业呈现蓬勃发展态势。软硬件一体化的深度融合,构建起智能化服务的核心架构,而移动应用作为连接用户与设备的重要桥梁,其作用愈发关键。深入研究该行业,可…...
什么是snmp协议?在优雅草星云智控AI物联网监控系统中如何添加设备进行监控【星云智控手册01】-优雅草卓伊凡
什么是snmp协议?在优雅草星云智控AI物联网监控系统中如何添加设备进行监控【星云智控手册01】-优雅草卓伊凡 优雅草星云智控物联网设备 本产品即将在5月15日在优雅草科技的承办下召开产品发布会,本产品需要报名参加可以通过活动行搜索星云智控进行报名…...
神经网络权重优化秘籍:梯度下降法全解析(五)
引言 在神经网络的训练过程中,权重更新是提升模型性能的关键环节,而梯度下降法及其优化算法则是实现这一关键环节的核心工具。理解并掌握这些方法,对于打造高效的神经网络模型至关重要。本文将深入剖析梯度下降法在神经网络权重更新中的应用…...
输入框仅支持英文、特殊符号、全角自动转半角 vue3
需求:封装一个输入框组件 1.只能输入英文。 2.输入的小写英文自动转大写。 3.输入的全角特殊符号自动转半角特殊字符 效果图 代码 <script setup> import { defineEmits, defineModel, defineProps } from "vue"; import { debounce } from "…...
Python简介与入门
目录 Python初始 Python的优势 Python 的特性 Linux下安装Python windows 系统安装python Python的语法基础 标识符 注释 语句与缩进 Python 常用的数据类型 数字 字符串 列表 列表的定义 列表的取值 重复列表 元组 元组的操作 字典 字典的创建 字典的取值操作 字典的添加、…...
C++学习笔记(三十六)——STL之排序算法
一、STL 算法 C的STL(Standard Template Library) 提供了一组高效、通用的算法,这些算法适用于各种容器(如 vector、list、set、map)。 这些算法主要位于 <algorithm> 和 <numeric> 头文件中。 通用性&a…...
G1 人形机器人软件系统架构与 Python SDK
如果说人形机器人的硬件是它的“身体”,那么软件系统就是它的“大脑”和“神经系统”,负责接收信息、进行决策并控制身体行动。理解 G1 机器人的软件架构,特别是如何通过编程接口与其交互,是进行机器人开发的核心。本节将剖析 G1 …...
Redis在SpringBoot中的使用
在SpringBoot项目中使用redis存储数据作为字典 本项目使用jdk1.8 一、添加依赖 <!-- spring boot redis缓存引入 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>…...
SuperMap GIS基础产品FAQ集锦(20250421)
一、SuperMap iDesktopX 问题1:iDesktopX怎么根据对数据集中的每条记录进行批量布局出图? 11.3.0 【解决办法】打开地图系列设置功能,勾选启用并设置索引地图,索引图层和索引字段等参数,打印地图册,设置输出路径&am…...
Linux学习笔记2
1.man man指令相当于一个在线手册 使用q可以退出指令运行 例如,使用 man ls 指令可以得到以下运行结果: 在查找的时候还可以使用数字,使用 man man 指令,对应每个数字所表示的内容: 在Linux下,一切皆是文件…...
电脑安装adb并且连接华为手机mate60pro后查看设备
1.下载adb工具 下载地址: https://developer.android.google.cn/tools/releases/platform-tools?hlzh-cn#downloads 根据需要下载自己系统需要的安装包 下载后解压 2.配置adb工具环境变量 添加ADB_HOME D:\softwares\platform-tools-latest-windows\platform-…...
EAL4+与等保2.0:解读中国网络安全双标准
EAL4与等保2.0:解读中国网络安全双标准 在当今数字化时代,网络安全已成为各个行业不可忽视的重要议题。特别是在金融、政府、医疗等领域,保护信息的安全性和隐私性显得尤为关键。在中国,EAL4和等级保护2.0(简称“等保…...
树莓派学习专题<8>:使用V4L2驱动获取摄像头数据--获取摄像头支持的分辨率
树莓派学习专题<8>:使用V4L2驱动获取摄像头数据--获取摄像头支持的分辨率 1. 获取摄像头支持的分辨率2. 代码分析3. 树莓派实测 1. 获取摄像头支持的分辨率 使用如下代码获取摄像头支持的输出分辨率。 struct v4l2_frmsizeenum stFrameSize …...
CSS预处理器对比:Sass、Less与Stylus如何选择
引言 CSS预处理器已成为现代前端开发的标准工具,它们通过添加编程特性来增强纯CSS的功能,使样式表更加模块化、可维护且高效。在众多预处理器中,Sass、Less和Stylus是三个最流行的选择,它们各自拥有独特的语法和功能特点。本文将深…...
Vue3集成sass
安装依赖 pnpm add -D sass-embedded配置全局变量 新建文件 src/styles/variables.scss配置Vite 修改 vite.config.ts variables.scss $base-color: bluevite.config.ts // https://vite.dev/config/ export default defineConfig({plugins: [vue(),],resolve: {alias: {:…...
超越Dify工作流:如何通过修改QwenAgent的Function Call及ReAct方法实现对日期时间的高效意图识别
在构建复杂的AI应用时,意图识别是一个至关重要的环节。传统上,许多开发者会使用Dify工作流来完成这一任务,但在处理复杂意图时,这种方法往往需要大模型进行多级反复识别,从而带来较高的时间成本。 本文将介绍如何通过修改QwenAgent框架中的FnCallAgent和ReActChat类,实现…...
Lua 第8部分 补充知识
8.1 局部变量和代码块 Lua 语言中的变量在默认情况下是全局变量 ,所有的局部变量在使用前必须声明 。 与全局变量不同,局部变量的生效范围仅限于声明它的代码块。一个代码块( block )是一个控制结构的主体,或是一个函…...
Lua 第7部分 输入输出
由于 Lua 语言强调可移植性和嵌入性 , 所以 Lua 语言本身并没有提供太多与外部交互的机制 。 在真实的 Lua 程序中,从图形、数据库到网络的访问等大多数 I/O 操作,要么由宿主程序实现,要么通过不包括在发行版中的外部库实现。 单就…...
Java 中 == 和 equals() 的区别
1. 运算符 是 Java 中的比较运算符,用于比较两个变量的值是否相等,但具体行为取决于变量的类型: 类型 比较的内容基本类型直接比较值是否相等(如 int a 5; int b 5; a b 返回 true)引用类型比较内存地址&#x…...
Redis新节点加入集群会发生什么(面试题)
新加入主节点:会发生槽位数据重新分配迁移, 新加入从节点,会发生主从同步,全量同步和增量同步 当一个新节点加入 Redis 集群时,会触发一系列操作以确保集群的稳定性和数据的一致性。以下是新节点加入 Redis 集群时的详…...
dmncdm达梦新云缓存数据库主从集群安装部署详细步骤说明
dmncdm达梦新云缓存数据库主从集群安装部署详细步骤说明 1 环境介绍2 安装部署dmncdm2.1 196部署cdm环境2.2 197部署cdm环境2.3 190部署cdm环境 3 主备集群/主从集群配置4 部署主备集群/主从集群5 部署日志6 更多达梦数据库全方位指南:安装 优化 与实战教程 1 环境介绍 cpu x8…...
docker容器,mysql的日志文件怎么清理
访问问题 你的问题是因为在当前路径 /home/ictrek/data/ragflow-mysql 下没有名为 data 的子目录。以下是详细分析和解决方法: 错误原因 路径不存在 当前目录 /home/ictrek/data/ragflow-mysql 下没有名为 data 的子目录,执行 cd data/ 时会报错 No suc…...
kafka auto.offset.reset详解
在 Kafka 中,auto.offset.reset latest 的含义及行为如下: 1. 核心定义 当消费者组首次启动或无法找到有效的 offset(例如 offset 过期、被删除或从未提交)时,消费者会从分区的最新位置…...
设备制造行业如何避免项目管理混乱?
项目常因进度延误、成本超支或部门协作不畅而陷入混乱? 这不仅拖累项目交付,还可能损害客户信任和企业利润。设备制造行业的项目管理复杂多变,从需求获取到生产交付再到售后运维,每一个环节都可能成为效率的瓶颈。 如何破解这一…...
kubernetes》》k8s》》删除命名空间
使用 kubectl delete ns 命名空间 --force --grace-period0 如果还删除不掉 需要 kubectl get namespace 命名空间 -o json > x.json vim x.json kubectl replace --raw “/api/v1/namespaces/命名空间/finalize” -f ./x.json...
【深度学习新浪潮】新视角生成的研究进展调研报告(2025年4月)
新视角生成(Novel View Synthesis)是计算机视觉与图形学领域的核心技术,旨在从单张或稀疏图像中生成任意视角的高保真图像,突破传统多视角数据的限制,实现对三维场景的自由探索。作为计算机视觉与图形学的交叉领域,近新视角生成年来在算法创新、应用落地和工具生态上均取…...
55、Spring Boot 详细讲义(十一 项目实战)springboot应用的登录功能和权限认证
项目文档:springboot应用的登录功能和权限认证 一、项目概述 1. 项目简介 本项目是在一个基于Spring Boot的Web应用中实现登录功能和权限认证。要求实现登录功能,用户登录成功以后,会给前台返回当前登录用户可以访问的权限菜单,比如超级管理员可以访问所有权限,产品管理…...
react 父子组件通信 子 直接到父, 父 forwardref子
React核心概念:单向数据流(Unidirectional Data Flow) React 中数据的流动像瀑布一样,只能从上层组件(父组件)流向下层组件(子组件)。 子组件无法直接反向修改父组件的数据&#x…...
基于TCP的协议
目录 TCP 基于TCP的应用层协议: TCP的工作方式 TCP TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它为应用层提供了一个可靠的端到端的数据传输服务。再TCP/IP模型中,TCP位于传输层,负责再…...
性能比拼: Go vs Java
本内容是对知名性能评测博主 Anton Putra Go (Golang) vs Java: Performance Benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中,我们将比较 Go 和 Java。 我们将基于 Golang 的 Fiber 框架和 Java 的 Spring Boot 创建几个简单的应用…...