365打卡第R3周: RNN-心脏病预测
🍨 本文为🔗365天深度学习训练营中的学习记录博客
🍖 原作者:K同学啊
🏡 我的环境:
语言环境:Python3.10
编译器:Jupyter Lab
深度学习环境:torch==2.5.1 torchvision==0.20.1
------------------------------分割线---------------------------------
import numpy as np
import pandas as pd
import torch
from torch import nn
import torch.nn.functional as F
import seaborn as sns#设置GPU训练,也可以使用CPU
device=torch.device("cuda" if torch.cuda.is_available() else "cpu")
device
df = pd.read_csv("data/heart.csv")df
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_splitX = df.iloc[:,:-1]
y = df.iloc[:,-1]# 将每一列特征标准化为标准正太分布,注意,标准化是针对每一列而言的
sc = StandardScaler()
X = sc.fit_transform(X)X = torch.tensor(np.array(X), dtype=torch.float32)
y = torch.tensor(np.array(y), dtype=torch.int64)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 1)X_train.shape, y_train.shapefrom torch.utils.data import TensorDataset, DataLoadertrain_dl = DataLoader(TensorDataset(X_train, y_train),batch_size=64, shuffle=False)test_dl = DataLoader(TensorDataset(X_test, y_test),batch_size=64, shuffle=False)
class model_rnn(nn.Module):def __init__(self):super(model_rnn, self).__init__()self.rnn0 = nn.RNN(input_size=13 ,hidden_size=200, num_layers=1, batch_first=True)self.fc0 = nn.Linear(200, 50)self.fc1 = nn.Linear(50, 2)def forward(self, x):out, hidden1 = self.rnn0(x) out = self.fc0(out) out = self.fc1(out) return out model = model_rnn().to(device)
model
# 训练循环
def train(dataloader, model, loss_fn, optimizer):size = len(dataloader.dataset) # 训练集的大小num_batches = len(dataloader) # 批次数目, (size/batch_size,向上取整)train_loss, train_acc = 0, 0 # 初始化训练损失和正确率for X, y in dataloader: # 获取图片及其标签X, y = X.to(device), y.to(device)# 计算预测误差pred = model(X) # 网络输出loss = loss_fn(pred, y) # 计算网络输出和真实值之间的差距,targets为真实值,计算二者差值即为损失# 反向传播optimizer.zero_grad() # grad属性归零loss.backward() # 反向传播optimizer.step() # 每一步自动更新# 记录acc与losstrain_acc += (pred.argmax(1) == y).type(torch.float).sum().item()train_loss += loss.item()train_acc /= sizetrain_loss /= num_batchesreturn train_acc, train_lossdef test (dataloader, model, loss_fn):size = len(dataloader.dataset) # 测试集的大小num_batches = len(dataloader) # 批次数目, (size/batch_size,向上取整)test_loss, test_acc = 0, 0# 当不进行训练时,停止梯度更新,节省计算内存消耗with torch.no_grad():for imgs, target in dataloader:imgs, target = imgs.to(device), target.to(device)# 计算losstarget_pred = model(imgs)loss = loss_fn(target_pred, target)test_loss += loss.item()test_acc += (target_pred.argmax(1) == target).type(torch.float).sum().item()test_acc /= sizetest_loss /= num_batchesreturn test_acc, test_lossloss_fn = nn.CrossEntropyLoss() # 创建损失函数
learn_rate = 1e-4 # 学习率
opt = torch.optim.Adam(model.parameters(),lr=learn_rate)
epochs = 50train_loss = []
train_acc = []
test_loss = []
test_acc = []for epoch in range(epochs):model.train()epoch_train_acc, epoch_train_loss = train(train_dl, model, loss_fn, opt)model.eval()epoch_test_acc, epoch_test_loss = test(test_dl, model, loss_fn)train_acc.append(epoch_train_acc)train_loss.append(epoch_train_loss)test_acc.append(epoch_test_acc)test_loss.append(epoch_test_loss)# 获取当前的学习率lr = opt.state_dict()['param_groups'][0]['lr']template = ('Epoch:{:2d}, Train_acc:{:.1f}%, Train_loss:{:.3f}, Test_acc:{:.1f}%, Test_loss:{:.3f}, Lr:{:.2E}')print(template.format(epoch+1, epoch_train_acc*100, epoch_train_loss, epoch_test_acc*100, epoch_test_loss, lr))print("="*20, 'Done', "="*20)
import matplotlib.pyplot as plt
from datetime import datetime
#隐藏警告
import warnings
warnings.filterwarnings("ignore") #忽略警告信息current_time = datetime.now() # 获取当前时间plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.rcParams['figure.dpi'] = 200 #分辨率epochs_range = range(epochs)plt.figure(figsize=(12, 3))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, train_acc, label='Training Accuracy')
plt.plot(epochs_range, test_acc, label='Test Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.xlabel(current_time) # 打卡请带上时间戳,否则代码截图无效plt.subplot(1, 2, 2)
plt.plot(epochs_range, train_loss, label='Training Loss')
plt.plot(epochs_range, test_loss, label='Test Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()
print("==============输入数据Shape为==============")
print("X_test.shape:",X_test.shape)
print("y_test.shape:",y_test.shape)pred = model(X_test.to(device)).argmax(1).cpu().numpy()print("\n==============输出数据Shape为==============")
print("pred.shape:",pred.shape)import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay# 计算混淆矩阵
cm = confusion_matrix(y_test, pred)plt.figure(figsize=(6,5))
plt.suptitle('')
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")# 修改字体大小
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.title("Confusion Matrix", fontsize=12)
plt.xlabel("Predicted Label", fontsize=10)
plt.ylabel("True Label", fontsize=10)# 显示图
plt.tight_layout() # 调整布局防止重叠
plt.show()test_X = X_test[0].reshape(1, -1) # X_test[0]即我们的输入数据pred = model(test_X.to(device)).argmax(1).item()
print("模型预测结果为:",pred)
print("=="*20)
print("0:不会患心脏病")
print("1:可能患心脏病")
测试集预测准确率为87.1%,为了进一步提高模型性能,做了如下改进:
1、调整数据加载方式(启用Shuffle),打乱训练数据顺序,使每个batch的数据分布更均匀,提升模型泛化能力。
# 修改前(shuffle=False)
train_dl = DataLoader(..., shuffle=False)# 修改后
train_dl = DataLoader(..., shuffle=True)
2、调整优化器和学习率
# 修改前
learn_rate = 1e-4
opt = torch.optim.Adam(model.parameters(), lr=learn_rate)# 修改后
opt = torch.optim.Adam(model.parameters(), lr=1e-4, weight_decay=1e-5) # 增加L2正则
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(opt, 'max', patience=5) # 动态调整学习率
修改之后预测率最高超过了90%,预测准确率也有所提高
------------------小结---------------------------
循环神经网络(RNN)是一种专门处理序列数据的神经网络模型,其核心特点可归纳如下:
一、序列建模能力
RNN通过循环连接结构处理序列输入(如文本、语音、时间序列),每个时间步的隐藏状态(hidden state)不仅依赖当前输入,还继承前一时间步的状态。这种设计使其能够捕捉时间依赖性,例如句子中单词的上下文关系或股价的历史趋势。
二、参数共享机制
所有时间步共享同一组权重参数(如输入-隐藏层和隐藏-隐藏层矩阵),显著减少模型复杂度并提升泛化能力。这一特性使其能灵活处理变长序列,无需为不同长度输入单独设计网络。
三、记忆性与动态状态
RNN通过隐藏状态的递归更新实现记忆功能,理论上可保留无限长的历史信息。例如,在机器翻译中,模型能利用前文信息生成连贯的译文。但实际中受限于梯度问题,长程依赖能力较弱。
相关文章:
365打卡第R3周: RNN-心脏病预测
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 🏡 我的环境: 语言环境:Python3.10 编译器:Jupyter Lab 深度学习环境:torch2.5.1 torchvision0…...
如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题
如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题 在现代软件开发过程中,开发人员通常使用集成开发环境(IDE)如IntelliJ IDEA、Visual Studio Code(VSCode)等进行Node.js项目开发…...
嵌入式学习笔记 - HAL_xxx_MspInit(xxx);函数
使用cubeMX生成的HAL库函数中,所有外设的初始化函数HAL_xxx_Init(&xxxHandle)中都存在有此调用函数,此调用函数其实是对各外设模块比如UART,I2C等的底层硬件初始化,包括UART时钟,以及UART用到的GPIO的工作模式以及…...
Dify框架面试内容整理-Dify框架
什么是Dify框架? Dify框架是一个开源的AI应用开发平台,专注于帮助开发者和非技术人员快速构建、部署和管理基于大语言模型(如GPT系列、国产开源模型)的应用。 Dify框架的特点:...
计算机网络的五层结构(物理层、数据链路层、网络层、传输层、应用层)到底是什么?
文章目录 五层结构1. 物理层(Physical Layer)2. 数据链路层(Data Link Layer)3. 网络层(Network Layer)4. 传输层(Transport Layer)5. 应用层(Application Layer…...
【计算机视觉】CV实战项目 -深度解析PaddleSegSharp:基于PaddleSeg的.NET图像分割解决方案
深度解析PaddleSegSharp:基于PaddleSeg的.NET图像分割解决方案 技术背景与项目概述核心功能与特点实战部署指南环境要求硬件要求软件依赖 项目结构快速开始1. 获取项目2. 准备模型文件3. 运行示例 高级使用技巧模型切换背景替换性能优化 常见问题与解决方案技术原理…...
面试新收获-大模型学习
大模型原理 Transformer 架构与自注意力机制 Transformer 是当前大多数大模型采用的核心架构,由编码器-解码器组成,摒弃了传统 RNN 的顺序处理方式。Transformer 中关键在于多头自注意力机制(Multi-Head Self-Attention)…...
《Keras 3部署全攻略:从新手到实战高手》
《Keras 3部署全攻略:从新手到实战高手》 一、引言:开启 Keras 3 部署之旅 在深度学习的广阔领域中,Keras 一直以其简洁易用、高度模块化的特性,深受开发者的喜爱,被誉为深度学习的 “福音”。而如今,Keras 3 的强势登场,更是为这个领域注入了全新的活力。它像是一位集…...
如何修改npm的全局安装路径?
修改 npm 的全局安装路径可以通过以下步骤完成,确保全局包(使用 -g 安装的模块)和缓存文件存储到自定义路径。以下是详细步骤: 1. 创建自定义路径的目录 在目标路径下创建两个文件夹,分别用于存储全局模块和缓存文件…...
计算机网络 | Chapter1 计算机网络和因特网
💓个人主页:mooridy-CSDN博客 💓文章专栏:《计算机网络:自定向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 🌹关注我,和我一起学习更多计算机网络的知识 🔝🔝 目录 …...
前端面试 HTML篇
src和href的区别 src和href都是用来加载外部资源,区别如下 src:当浏览器解析到该元素时,会暂停其他资源的加载和处理,直到该资源加载完成。 它会将资源内容嵌入到当前标签所在的位置,将其指向的资源下载应用到文档内…...
Prometheus、Zabbix 和 Nagios 这三个工具的对100个节点的部署设计的信息流
Prometheus 1. 基本组件及角色 Prometheus主要由Prometheus Server、Exporter、Alertmanager和Grafana(可选)等组件构成。 Prometheus Server:负责数据的收集、存储和查询,以及规则的评估。Exporter:部署在被监控节点上,负责收集节点的各种指标数据。Alertmanager:负责…...
Tableau 基础表制作
目录 1.数据连接 2. 数据可视化 3. 基础表制作 3.1 对比分析:比大小 1. 柱状图 2. 条形图 3. 热力图 4. 气泡图 5. 词云 3.2 变化分析:看趋势 1. 折线图 2. 面积图 3.3 构成分析:看占比 1. 饼图 2. 树地图 3. 堆积图 3.4 关…...
openAICEO山姆奥特曼未来预测雄文之三个观察
《三个观察》 山姆奥特曼 这篇文章主要讲的是关于AGI(人工通用智能)的未来发展及其对社会的影响,用大白话总结如下: 核心观点: AGI是什么? AGI是一种能像人类一样解决各种复杂问题的智能系统,比…...
springboot入门-service层构造器注入原理
在 Spring Boot 中,通过构造器注入的方式将 Repository(JPA)或 Mapper(MyBatis)注入到 Service 层的原理及示例如下: 1. 构造器注入的原理 依赖注入(DI)机制: Spring 容…...
JavaScript 笔记 --- part6 --- JS进阶 (part1)
JS 进阶(part1) 作用域 局部作用域 定义: 局部作用域指的是在函数内部定义的变量,只能在函数内部访问,外部不能访问。 特点: 局部作用域变量只能在函数内部或代码块中访问,外部不能访问。 分类: 函数作用域: 指的是在函数内部定义的变量&…...
使用matplotlib绘制Raincloud图/云雨图/柱状图/小提琴图
需求: 使用Python的matplotlib绘制数据分布、数据箱型图、数据散点图 参考: https://blog.csdn.net/weixin_39559994/article/details/128197965?fromshareblogdetail&sharetypeblogdetail&sharerId128197965&sharereferPC&sharesource…...
BT152-ASEMI机器人率器件专用BT152
编辑:LL BT152-ASEMI机器人率器件专用BT152 型号:BT152 品牌:ASEMI 封装:TO-220F 批号:最新 引脚数量:3 封装尺寸:如图 特性:单向可控硅 工作结温:-40℃~150℃ …...
【Redis——通用命令】
文章目录 Redis为什么快?生产环境的概念Redis中最核心的两个命令get:通过key拿valueset:将key和value存入数据库 其他通用命令keysexist判定key是否存在delexpire:为指定的key设置一个过期时间TTL(Time To Live&#x…...
qt之开发大恒usb3.0相机一
1.在大恒相机给的sample里没有看见qt开发的demo. 第一步先运行c sdk中中的demo,看了下代码,大恒使用的UI框架是MFC.然后 vs2022编译。运行结果 第一步,先用qt进行坐下页面布局,如下图(保存图片的地方做了些更改&#…...
系列位置效应——AI与思维模型【80】
一、定义 系列位置效应思维模型是指在一系列事物或信息的呈现过程中,人们对于处于系列开头和结尾部分的项目的记忆效果优于中间部分项目的现象。具体而言,开头部分的记忆优势被称为首因效应,结尾部分的记忆优势被称为近因效应。这种效应反映…...
解决conda虚拟环境安装包却依旧安装到base环境下
最近跑项目装包装到几度崩溃,包一直没有安装到正确位置,为此写下这篇文章记录一下,也希望能帮到有需要的人。(此文章开发环境为anaconda和window) 方法一 先conda deactivate,看到(base)消失…...
设计看似完美却测不过? Intra-Pair Skew 是「讯号完整性(Signal Integrity)」里最隐形的杀手
各位不知道有没有遇过,一对很长的差分走线,看起来很正常,但是测试结果偶尔会fail偶尔会pass,不像是软件问题,也不像是制程问题。 看了一下Layout,发现阻抗匹配控制的非常好,TDR测试也显示阻抗好…...
使用MyBatis注解方式的完整示例,涵盖CRUD、动态SQL、分页、事务管理等场景,并附详细注释和对比表格
以下是使用MyBatis注解方式的完整示例,涵盖CRUD、动态SQL、分页、事务管理等场景,并附详细注释和对比表格: 项目结构 mybatis-annotation-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com.example/…...
【头脑风暴】加权平均
一些加权平均而不是算术平均的思路,启发来源:ACLS,WACLS。 简单平均假设所有样本的误差和噪声特性相同,但在实际电路中,不同阶段、不同时间点的样本价值(对最终精度的贡献)是不同的。加权平均的核心思想…...
DAM-3B,英伟达推出的多模态大语言模型
DAM-3B是什么 DAM-3B(Describe Anything 3B)是英伟达推出的一款多模态大语言模型,专门用于为图像和视频中的特定区域生成详细描述。用户可以通过点、边界框、涂鸦或掩码等方式来标识目标区域,从而得到精准且符合上下文的文本描述…...
2025年暨南大学 ACM校赛分析与题解
文章目录 C.最长公共前缀D.排列H.回文串 法不定法,在于因时因势AC不了就是还得加练! C.最长公共前缀 字典树模版题目,不了解字典树的同学,可以看我的另一篇博客 算法 之 字典树 class Node: # 和模版题目相似,但是多…...
图像处理——边缘检测
1 概述 边缘检测是图像处理和计算机视觉中的一项基本技术,用于识别图像中亮度变化剧烈的像素点,这些像素点通常对应于物体的边界。它通过检测图像中亮度或颜色变化显著的区域,提取出物体的轮廓,常用于计算机视觉、图像处理和模式识…...
认识哈希以及哈希表的模拟实现
文章目录 1.什么是哈希2.哈希函数2.1 除留余数法/除法散列法2.2 乘法散列法2.3 全域散列法 3.哈希冲突4.解决哈希冲突的方法4.1 开放定址法4.1.1 用除留余数法和线性探测模拟实现简单的哈希表 4.2 链地址法4.2.1 用除留余数法和链地址法模拟实现简单的哈希表 1.什么是哈希 概念…...
【Castle-X机器人】二、智能导览模块安装与调试
持续更新。。。。。。。。。。。。。。。 【Castle-X机器人】智能导览模块安装与调试 二、智能导览模块安装与调试2.1 智能导览模块安装2.2 智能导览模块调试2.2.1 红外测温传感器测试2.2.2 2D摄像头测试 二、智能导览模块安装与调试 2.1 智能导览模块安装 使用相应工具将智能…...
硬件须知的基本问题2
目录 1、典型电路 1. DC5V 转 DC3.3V 电路 2. 通信电路 2、STM32F103RCT6 最小系统如何设计搭建电路 1. 电源电路 2. 复位电路 3. 时钟电路 4. 下载电路 5. 单片机连接连接 3、请列举你所知道的二极管型号? 1. 整流二极管 2. 小信号二极管 3. 肖特基二极管 4. 超…...
Dify 使用 excel 或者 csv 文件创建知识库
Dify 使用 excel 或者 csv 文件创建知识库 1. 创建知识库2. 创建聊天助手3. 其他 1. 创建知识库 创建知识库,导入excel/csv文件, 文件内容, 单击 “预览块”,可以确认会生成多个键值对的块, 配置 Embedding 模型和检索…...
深入理解二叉树遍历:递归与栈的双重视角
二叉树的遍历前序遍历中序遍历后续遍历总结 二叉树的遍历 虽然用递归的方法遍历二叉树实现起来更简单,但是要想深入理解二叉树的遍历,我们还必须要掌握用栈遍历二叉树,递归其实就是利用了系统栈去遍历。特此记录一下如何用双重视角去看待二叉…...
通过gap看margin和padding在布局中的应用
在CSS布局中,控制元素之间的间距有多种方式:margin、padding,还有新晋的gap属性。虽然选择多了,但这也带来了不少头疼的问题。比如,你的自定义组件到底该不该加margin?如果加了,那在使用这个组件…...
图像畸变-径向切向畸变实时图像RTSP推流
实验环境 注意:ffmpeg进程stdin写入两张图片的时间间隔不能太长,否则mediamtx会出现对应的推流session超时退出。 实验效果 全部代码 my_util.py #进度条 import os import sys import time import shutil import logging import time from datetime i…...
2025最新Facefusion3.1.2使用Docker部署,保姆级教程,无需配置环境
Docker部署Facefusion 环境 windows10 Facefusion3.1.2 安装 拉取源代码 git clone https://github.com/facefusion/facefusion-docker.git 此处如果拉不下来,需要科学上网,不会的可以找我。 运行容器 将Dockerfile.cpu文件中的的From python:3.…...
区块链实战:Hyperledger Fabric多节点网络部署与高性能业务链码
一、联盟链架构设计与技术选型 1.1 架构设计原则 联盟链采用分层架构,包含应用层、共识层、网络层和数据层: 应用层:提供用户接口(Web/API)和智能合约交互入口共识层:采用PBFT或…...
C++学习笔记(四十)——STL之归约算法
STL 算法分类: 类别常见算法作用排序sort、stable_sort、partial_sort、nth_element等排序搜索find、find_if、count、count_if、binary_search等查找元素修改copy、replace、replace_if、swap、fill等修改容器内容删除remove、remove_if、unique等删除元素归约for…...
docker容器运维工具——ctop
概述 Github主页:https://github.com/bcicen/ctop 当服务器上运行多个容器时,迅速查看所有容器运行情况及指标将会大为提高工作效率。ctop工具可以像top命令一样,对所有容器进行总览,并实现简单的操作。 部署 下载(…...
RAG vs 微调:大模型知识更新的最优解之争
一、技术本质:知识注入的两条路径 在大模型应用落地的实践中,RAG(检索增强生成)与微调(Fine-tuning)已成为知识更新的两大核心技术路径。二者的本质差异在于是否对模型参数进行修改: 维度RAG微…...
FPGA前瞻篇-组合逻辑电路设计-多路复用器
多路选择器(MUX)简介 基本概念 多路选择器(MUX,Multiplexer)是一种多输入、单输出的组合逻辑电路。 它通过选择控制信号,在多个输入信号中选择一个连接到输出端。 可以理解为一个多路数字开关。 &…...
Day13(前缀和)——LeetCode2845.统计趣味子数组的数目
1 题目描述 给定一个下标从0开始的数组nums,以及整数modulo和k。找出并统计数组中趣味子数组的数目: 在范围[l,r]内,设cnt为满足nums[i]%modulok的索引i的数量,并且cnt%modulok。子数组是数组中的一个连续非空的元素序列。 其中一…...
WebcamJS中文文档
文章目录 WebcamJS针对Chrome 47及以上版本的重要说明浏览器支持演示示例开源协议快速入门指南配置初始化拍摄照片自定义图像大小裁剪图像翻转图像(镜像模式)冻结/预览图像设置备用SWF文件位置重置(关闭)API 参考自定义事件向服务器提交图像跟踪上传进度包含在现有表单中自…...
论文笔记(八十)π0.5: a Vision-Language-Action Model with Open-World Generalization
π0.5: a Vision-Language-Action Model with Open-World Generalization 文章概括摘要I. 引言II. 相关工作通用机器人操作策略。非机器人数据的协同训练。使用语言进行机器人推理和规划。具有开放世界泛化能力的机器人学习系统。 III. 序言IV. π 0.5 π_{0.5} π0.5 模型与…...
pymongo功能整理与基础操作类
以下是 Python 与 PyMongo 的完整功能整理,涵盖基础操作、高级功能、性能优化及常见应用场景: 1. 安装与连接 (1) 安装 PyMongo pip install pymongo(2) 连接 MongoDB from pymongo import MongoClient# 基础连接(默认本地,端口…...
硬件须知的基本问题1
目录 1. 电路表示中的电压源表示符号有哪些? 2.查找电路表示中的电流源表示符号有哪些? 3.上拉电阻和下拉电阻的作用是什么? 4.0 欧姆电阻在电路中有什么作用? 5.电容的耦合…...
LangChain 中的 Task(任务) 主要通过 生成器(Generator) 实现,而非传统的迭代器(Iterator)
LangChain 中的 Task(任务) 主要通过 生成器(Generator) 实现,而非传统的迭代器(Iterator)。以下是关键分析: 任务链的流程控制 LangChain 的 链式结构(Chains࿰…...
加里·基尔代尔:CP/M之父与个人计算时代的先驱
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 加里基尔代尔:CP/M之父与个人计算时代的先驱 一、早年生活与教育背景 1.…...
深入解析Spring Boot配置处理器:机制、架构与实践
深入解析Spring Boot配置处理器:机制、架构与实践 Spring Boot的配置处理器(spring-boot-configuration-processor)是支撑其智能配置体验的关键组件。本文结合实际开发需求,从使用方式、底层原理到性能优化与架构设计,…...
Ragflow新建的知识库完成后刷新却没有显示,报错MethodNotAllowed: 405 Method Not Allowed:
环境: Ragflow17.2 debian12.8 问题描述: Ragflow新建的知识库完成后刷新却没有显示,报错MethodNotAllowed: 405 Method Not Allowed: The method is not allowed for the requested URL. 后台日志: 2025-04-25 13:54:25,988 ERROR 235204 405 Method Not Allowed:…...