SSCLMD模型代码实现详解
SSCLMD模型代码实现详解
1. 项目源码结构
SSCLMD项目的源码结构如下:
SSCLMD-main/
├── README.md
├── ST4.xlsx
├── Supplementary File.docx
├── code/
│ ├── calculating_similarity.py
│ ├── data_preparation.py
│ ├── data_preprocess.py
│ ├── layer.py
│ ├── main.py
│ ├── parms_setting.py
│ ├── train.py
│ └── utils.py
└── data/├── dataset1.rar└── dataset2.rar
2. 模型核心组件详解
2.1 模型定义(layer.py)
模型在layer.py
文件中定义,主要包含以下几个关键类:
- Attention类:
class Attention(nn.Module):def __init__(self, in_size, hidden_size=128): # LDA:128 MDA,LMI:16super(Attention, self).__init__()self.project = nn.Sequential(nn.Linear(in_size, hidden_size),nn.Tanh(),nn.Linear(hidden_size, 1, bias=False))def forward(self, z):w = self.project(z)beta = torch.softmax(w, dim=1)return (beta * z).sum(1), beta
这是一个注意力机制的实现,通过计算不同视图的权重,实现对不同视图特征的加权聚合。
- GCN类:
class GCN(nn.Module):def __init__(self, nfeat, nhid, out, dropout = 0.5):super(GCN, self).__init__()self.gc1 = GCNConv(nfeat, nhid)self.prelu1 = nn.PReLU(nhid)self.gc2 = GCNConv(nhid, out)self.prelu2 = nn.PReLU(out)self.dropout = dropoutdef forward(self, x, adj):x = self.prelu1(self.gc1(x, adj))x = F.dropout(x, self.dropout, training=self.training)x = self.prelu2(self.gc2(x, adj))return x
这是图卷积网络的实现,用于从图结构中提取节点特征。
- Discriminator类:
class Discriminator(nn.Module):def __init__(self, dim):super(Discriminator, self).__init__()self.fn = nn.Bilinear(dim, dim, 1)def forward(self, h1, h2, h3, h4, c1, c2):c_x1 = c1.expand_as(h1).contiguous()c_x2 = c2.expand_as(h2).contiguous()# positivesc_1 = self.fn(h1, c_x1).squeeze(1)sc_2 = self.fn(h2, c_x2).squeeze(1)# negativesc_3 = self.fn(h3, c_x1).squeeze(1)sc_4 = self.fn(h4, c_x2).squeeze(1)logits = th.cat((sc_1, sc_2, sc_3, sc_4))return logits
这是自监督对比学习的判别器,用于区分正样本和负样本。
- SSCLMD类:
class SSCLMD(nn.Module):def __init__(self, in_dim, hid_dim, out_dim, decoder1):super(SSCLMD, self).__init__()self.encoder1 = GCN(in_dim, hid_dim, out_dim)self.encoder2 = GCN(in_dim, hid_dim, out_dim)self.encoder3 = GCN(in_dim, hid_dim, out_dim)self.encoder4 = GCN(in_dim, hid_dim, out_dim)self.pooling = AvgReadout()self.attention = Attention(out_dim)self.disc = Discriminator(out_dim)self.act_fn = nn.Sigmoid()self.local_mlp = nn.Linear(out_dim, out_dim)self.global_mlp = nn.Linear(out_dim, out_dim)self.decoder1 = nn.Linear(out_dim * 4, decoder1)self.decoder2 = nn.Linear(decoder1, 1)
这是SSCLMD模型的主要类,整合了编码器、注意力机制、判别器和解码器。
2.2 网络前向传播过程
SSCLMD模型的前向传播过程如下:
def forward(self, data_s, data_f, idx):# 获取特征和图结构feat, s_graph = data_s.x, data_s.edge_indexshuff_feat, f_graph = data_f.x, data_f.edge_index# 结构图和特征图编码h1 = self.encoder1(feat, s_graph)h2 = self.encoder2(feat, f_graph)h1 = self.local_mlp(h1)h2 = self.local_mlp(h2)# 负样本编码h3 = self.encoder1(shuff_feat, s_graph)h4 = self.encoder2(shuff_feat, f_graph)h3 = self.local_mlp(h3)h4 = self.local_mlp(h4)# 额外的编码用于关系预测h5 = self.encoder3(feat, s_graph)h6 = self.encoder3(feat, f_graph)# 全局表示c1 = self.act_fn(self.global_mlp(self.pooling(h1)))c2 = self.act_fn(self.global_mlp(self.pooling(h2)))# 自监督对比学习out = self.disc(h1, h2, h3, h4, c1, c2)# 多视图融合h_com = (h5 + h6)/2emb = torch.stack([h1, h2, h_com], dim=1)emb, att = self.attention(emb)# 根据任务类型选择实体if args.task_type == 'LDA':entity1 = emb[idx[0]]entity2 = emb[idx[1] + 386]if args.task_type == 'MDA':entity1 = emb[idx[0] + 702]entity2 = emb[idx[1] + 386]if args.task_type == 'LMI':entity1 = emb[idx[0]]entity2 = emb[idx[1] + 702]# 多关系建模解码器add = entity1 + entity2product = entity1 * entity2concatenate = torch.cat((entity1, entity2), dim=1)feature = torch.cat((add, product, concatenate), dim=1)log1 = F.relu(self.decoder1(feature))log = self.decoder2(log1)return out, log
3. 数据预处理过程详解
数据预处理主要在data_preprocess.py
文件中实现,关键步骤包括:
- 数据加载与正负样本构建:
positive = np.loadtxt(args.in_file, dtype=np.int64)
link_size = int(positive.shape[0])
np.random.seed(args.seed)
np.random.shuffle(positive)
positive = positive[:link_size]negative_all = np.loadtxt(args.neg_sample, dtype=np.int64)
np.random.shuffle(negative_all)
negative = np.asarray(negative_all[:positive.shape[0]])positive = np.concatenate([positive, np.ones(positive.shape[0], dtype=np.int64).reshape(-1, 1)], axis=1)
negative = np.concatenate([negative, np.zeros(negative.shape[0], dtype=np.int64).reshape(-1, 1)], axis=1)all_data = np.vstack((positive, negative))
- 构建K折交叉验证数据集:
kf = KFold(n_splits=n_splits, shuffle=True, random_state=args.seed)cv_train_loaders = []
cv_test_loaders = []for train_index, test_index in kf.split(all_data):train_data = all_data[train_index]test_data = all_data[test_index]train_positive = train_data[train_data[:, 2] == 1][:, :2]# 构建邻接矩阵...# 构建数据加载器training_set = Data_class(train_data)train_loader = DataLoader(training_set, **params)test_set = Data_class(test_data)test_loader = DataLoader(test_set, **params)cv_train_loaders.append(train_loader)cv_test_loaders.append(test_loader)
- 构建图数据结构:
# 构建边索引
edges_s = s_adj.nonzero()
edge_index_s = torch.tensor(np.vstack((edges_s[0], edges_s[1])), dtype=torch.long)edges_f = f_adj.nonzero()
edge_index_f = torch.tensor(np.vstack((edges_f[0], edges_f[1])), dtype=torch.long)# 转换特征为张量
x = torch.tensor(node_feature, dtype=torch.float)
shuf_feature = torch.tensor(shuf_feature, dtype=torch.float)# 创建PyG的Data对象
data_s = Data(x=x, edge_index=edge_index_s)
data_f = Data(x=shuf_feature, edge_index=edge_index_f)
4. 训练过程详解
训练过程在train.py
文件中实现,主要包括以下几个步骤:
- 模型初始化:
model = SSCLMD(in_dim = args.dimensions, hid_dim= args.hidden1, out_dim = args.hidden2, decoder1=args.decoder1)
optimizer = torch.optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay)m = torch.nn.Sigmoid()
loss_fct = torch.nn.BCEWithLogitsLoss()
loss_node = torch.nn.BCELoss()
- 训练循环:
for epoch in range(args.epochs):t = time.time()print('-------- Epoch ' + str(epoch + 1) + ' --------')y_pred_train = []y_label_train = []lbl_1 = torch.ones(997 * 2) # dataset1: 997, dataset2: 1071lbl_2 = torch.zeros(997 * 2)lbl = torch.cat((lbl_1, lbl_2)).cuda()for i, (label, inp) in enumerate(train_loader):if args.cuda:label = label.cuda()model.train()optimizer.zero_grad()# 前向传播output, log = model(data_s, data_f, inp)log = torch.squeeze(m(log))# 计算损失loss_class = loss_node(log, label.float())loss_constra = loss_fct(output, lbl)loss_train = loss_class + args.loss_ratio1 * loss_constra# 反向传播loss_train.backward()optimizer.step()# 收集预测结果label_ids = label.to('cpu').numpy()y_label_train = y_label_train + label_ids.flatten().tolist()y_pred_train = y_pred_train + log.flatten().tolist()if i % 100 == 0:print('epoch: ' + str(epoch + 1) + '/ iteration: ' + str(i + 1) + '/ loss_train: ' + str(loss_train.cpu().detach().numpy()))# 计算训练集上的ROC AUCroc_train = roc_auc_score(y_label_train, y_pred_train)print('epoch: {:04d}'.format(epoch + 1),'loss_train: {:.4f}'.format(loss_train.item()),'auroc_train: {:.4f}'.format(roc_train),'time: {:.4f}s'.format(time.time() - t))
- 测试过程:
def test(model, loader, data_s, data_f, args):m = torch.nn.Sigmoid()loss_fct = torch.nn.BCEWithLogitsLoss()loss_node = torch.nn.BCELoss()# 设置标签lbl_1 = torch.ones(997 * 2)lbl_2 = torch.zeros(997 * 2)lbl = torch.cat((lbl_1, lbl_2)).cuda()inp_id0 = []inp_id1 = []model.eval()y_pred = []y_label = []with torch.no_grad():for i, (label, inp) in enumerate(loader):inp_id0.append(inp[0])inp_id1.append(inp[1])if args.cuda:label = label.cuda()# 前向传播output, log = model(data_s, data_f, inp)log = torch.squeeze(m(log))# 计算损失loss_class = loss_node(log, label.float())loss_constra = loss_fct(output, lbl)loss = loss_class + args.loss_ratio1 * loss_constra# 收集预测结果label_ids = label.to('cpu').numpy()y_label = y_label + label_ids.flatten().tolist()y_pred = y_pred + log.flatten().tolist()outputs = np.asarray([1 if i else 0 for i in (np.asarray(y_pred) >= 0.5)])# 计算评估指标return roc_auc_score(y_label, y_pred), average_precision_score(y_label, y_pred), f1_score(y_label, outputs), loss
5. 主程序流程(main.py)
主程序的流程非常简洁:
# 参数设置
args = settings()# CUDA设置
args.cuda = not args.no_cuda and torch.cuda.is_available()
np.random.seed(args.seed)
torch.manual_seed(args.seed)
if args.cuda:torch.cuda.manual_seed(args.seed)# 加载数据
data_s, data_f, train_loader, test_loader = load_data(args, n_splits=5)# 对每个fold进行训练和测试
for fold, (train_loader, test_loader) in enumerate(zip(train_loader, test_loader)):print(f"Training on fold {fold+1}")train_model(data_s, data_f, train_loader, test_loader, args)
6. 参数设置(parms_setting.py)
模型参数设置在parms_setting.py
中定义,主要包括:
def settings():parser = argparse.ArgumentParser()# 公共参数parser.add_argument('--seed', type=int, default=0,help='Random seed. Default is 0.')parser.add_argument('--no-cuda', action='store_true', default=False,help='Disables CUDA training.')parser.add_argument('--workers', type=int, default=0,help='Number of parallel workers. Default is 0.')# 数据路径参数parser.add_argument('--in_file', default="dataset1/LDA.edgelist",help='Path to data fold. e.g., data/LDA.edgelist')parser.add_argument('--neg_sample', default="dataset1/no_LDA.edgelist",help='Path to data fold. e.g., data/LDA.edgelist')parser.add_argument('--task_type', default="LDA", choices=['LDA', 'MDA','LMI'],help='Initial prediction task type. Default is LDA.')# 训练参数parser.add_argument('--lr', type=float, default=5e-4,help='Initial learning rate. Default is 5e-4.')parser.add_argument('--dropout', type=float, default=0.5,help='Dropout rate. Default is 0.5.')parser.add_argument('--weight_decay', default=5e-4,help='Weight decay (L2 loss on parameters) Default is 5e-4.')parser.add_argument('--batch', type=int, default=25,help='Batch size. Default is 25.')parser.add_argument('--epochs', type=int, default=80,help='Number of epochs to train. Default is 80.')parser.add_argument('--loss_ratio1', type=float, default=0.1,help='Ratio of self_supervision. Default is 1 (LDA), 0.1 (MDA,LMI)')# 模型参数parser.add_argument('--dimensions', type=int, default=512,help='dimensions of feature d. Default is 512 (LDA), 1024 (LDA and LMI)')parser.add_argument('--hidden1', default=256,help='Embedding dimension of encoder layer 1 for SSCLMD. Default is d/2.')parser.add_argument('--hidden2', default=128,help='Embedding dimension of encoder layer 2 for SSCLMD. Default is d/4.')parser.add_argument('--decoder1', default=512,help='Embedding dimension of decoder layer 1 for SSCLMD. Default is 512.')args = parser.parse_args()return args
7. 计算相似性(calculating_similarity.py)
该文件主要用于计算不同类型节点之间的相似性,构建拓扑图的内边关系。
8. 数据准备(data_preparation.py)
该文件用于计算lncRNA/miRNA的k-mer特征并构建基于属性的KNN图。
9. 工具函数(utils.py)
utils.py
包含一些辅助函数,如拉普拉斯归一化、行归一化等。
10. 项目复现步骤细节
-
环境准备:
- 安装Python 3.7+
- 安装必要的依赖:numpy, torch, sklearn, torch-geometric
-
数据准备:
- 解压
data/dataset1.rar
和data/dataset2.rar
- 解压
-
特征预处理:
- 运行
data_preparation.py
生成k-mer特征和属性图 - 运行
calculating_similarity.py
计算相似性和拓扑图内边
- 运行
-
模型训练与测试:
- 运行
main.py
启动训练和测试过程 - 根据需要修改
parms_setting.py
中的参数
- 运行
-
结果评估:
- 查看输出的AUROC、AUPRC和F1分数
- 可以保存模型以便后续使用
11. 代码优化建议
- 代码模块化:将数据加载、模型定义、训练和测试过程更好地模块化
- 参数管理:使用配置文件而不是硬编码的参数值
- 日志记录:添加更详细的日志记录,方便调试和分析
- 可视化:添加训练过程的可视化,如损失曲线和性能指标变化
- 数据并行:对于大规模数据集,添加数据并行处理能力
- 模型保存:添加定期保存模型检查点的功能
- 早停策略:实现早停策略,避免过拟合
相关文章:
SSCLMD模型代码实现详解
SSCLMD模型代码实现详解 1. 项目源码结构 SSCLMD项目的源码结构如下: SSCLMD-main/ ├── README.md ├── ST4.xlsx ├── Supplementary File.docx ├── code/ │ ├── calculating_similarity.py │ ├── data_preparation.py │ ├── data_…...
【coze】故事卡片(图片、音频、文字)
【coze】故事卡片(图片、音频、文字) 1、创建智能体2、添加人设与回复逻辑3、添加工作流(1)创建工作流(2)添加大模型节点(3)添加提示词优化节点(4)添加豆包图…...
限免开关实施版本保护措施,保证项目灰度发布安全
迭代用户限免权限校验业务 新增限免开关实现普通用户权益更新,实施版本保护措施,保证项目灰度发布安全; // 是否展示限免标识 func (t *BasePrivilegeService) IsPromotionFree(p consumParams) bool {// 限免开关isFreeUseOpen : p.cfg.Vip…...
C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化
多窗口源码 C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化资源-CSDN文库 读图结果展示 字符串结果展示 利用TCP调试工具创建两个tcp 再次启动程序 就链接…...
了解一下OceanBase中的表分区
OceanBase 是一个高性能的分布式关系型数据库,它支持 SQL 标准的大部分功能,包括分区表。分区表可以帮助管理大量数据,提高查询效率,通过将数据分散到不同的物理段中,可以减少查询时的数据扫描量。 在 OceanBase 中操…...
生成了一个AI算法
import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 1. 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) # MNIST单通道归一化 ]) train_da…...
C# 使用SunnyUI控件 (VS 2019)
前言:建议下载源码,源码中包含了各种控件的用法案例。 下载 帮助文档: 文档预览 - Gitee.comGitee: SunnyUI: SunnyUI.NET 是基于.NET Framework 4.0、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。GitHub: h…...
在 Win11 下安装 Wireshark 的详细步骤
目录 一、了解 Wireshark1. 作用和功能2. 使用步骤 二、下载安装包三、运行安装包四、使用 Wireshark1. 抓包2. 窗口介绍3. 过滤器(显示 / 捕获过滤器)4. 保存过滤后的报文1)显示过滤器表达式2)过滤表达式的规则 5. 封包列表6. 封…...
【AI提示词】六顶思考帽工具专家
提示说明 提供专业的六顶思考帽工具应用服务,帮助用户从多角度进行创新性问题解决。 提示词 # Role: 六顶思考帽工具专家## Profile - language: 中文 - description: 提供专业的六顶思考帽工具应用服务,帮助用户从多角度进行创新性问题解决 - backgr…...
解锁RAG:AI 2.0时代的“知识外挂”是如何炼成的?
——从原理到实战,揭秘检索增强生成如何颠覆传统AI 引言:当AI学会“开卷考试” 如果传统大模型是“闭卷学霸”,那RAG(Retrieval-Augmented Generation,检索增强生成)就是那个考试时带着“百科全书”的超级…...
使用 ANSYS SIwave 求解器在 ANSYS AEDT 中预测串行通道性能并生成眼图
PCB 仿真 如今,无线射频设备日益复杂,对大型复杂 PCB 设计进行准确、高效仿真的需求也随之增加。在设计流程的早期识别和预测潜在问题可以节省资源、时间和金钱。SIwave 可帮助您对现代高性能电子产品中典型的高速通道和完整的输电系统进行建模、仿真和…...
启发式算法-模拟退火算法
模拟退火算法是一种基于概率的启发式优化算法,用于解决大规模组合优化问题,其灵感来源于金属退火过程中的物理现象。其基本原理是从一个初始解开始,然后在当前解的邻域内随机生成一个新解,如果新解的目标函数值优于当前解…...
机器视觉框架源码——解读3(常用的资源和样式)
这是关于框架解读的第三篇文章,将结合理论和框架代码进行讲解。 WPF中的各类工件元素,都可以设置其样式,如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Backgroud) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment) 而样…...
勒索病毒肆虐时代:数据库加密存储的实践指南
在2025年第一季度,全球勒索攻击损失突破150亿美元,某跨国制造企业因数据库未加密被勒索3000枚比特币,某省级医保系统遭攻击导致参保人信息泄露……当医疗数据、金融资产、知识产权成为黑客的提款机,数据库加密已从技术选项升级为生…...
next中的server comonent中如何共享session
在 Next.js 的服务器组件(Server Components)里共享会话(session),可以借助第三方库(如 next-auth 或 express-session 结合自定义 API 路由)来实现,下面为你详细介绍这两种常见的实…...
Desfire Ev1\Ev2\Ev3卡DES\3K3DES\AES加解密读写VB.Net示例源码
本示例使用发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bSxJTb6&ftt&id917152255720 Public Class Form1Public Declare Function pcdbeep Lib "OUR_MIFARE.dll" (ByVal xms As Integer) As BytePublic Declare Fu…...
商业实战将归巢网内容构建为本地RAG模型的完整指南01-优雅草卓伊凡
商业实战将归巢网内容构建为本地RAG模型的完整指南01-优雅草卓伊凡 今天卓伊凡收到了老客户归巢网关于对本地RAG模型建立的咨询,这点也让卓伊凡得深入研究下,毕竟老客户肯定不是说着玩的,主要最终实现目的是建立模型开始使用AI智能问答。 一…...
langchain4j整合springboot
环境介绍 JDK17Spring Boot: 3.0.2 创建springboot工程 IDEA新建一个springboot项目,使用Spring lnitializr快速构建。 选择Spring Boot: 3.0.2以及Spring Web依赖 添加maven依赖 创建完springboot项目之后,在pom中添加关键依赖 <properties&g…...
在线时间戳转换工具
给大家推荐一个在线时间戳转换工具 点击跳转-鸽鸽在线工具 这个工具除了时间戳转换,到首页还能选择使用很多其他小工具,欢迎使用...
Codeforces Round 1023 (Div. 2) (A-D)
每周至少五篇博客:(1/5) A. LRC and VIP 题意 您有一个大小 n n n 的数组 a a a - a 1 , a 2 , … a n a_1, a_2, \ldots a_n a1,a2,…an 。 您需要将 n n n 元素分为 2 2 2 序列 B B B 和 C C C ,以满足以下条件: 每个元素…...
[Survey]Remote Sensing Temporal Vision-Language Models: A Comprehensive Survey
BaseInfo TitleRemote Sensing Temporal Vision-Language Models: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2412.02573Journal/Time2024 arxivAuthor北航 上海AI LabCodehttps://github.com/Chen-Yang-Liu/Awesome-RS-Temporal-VLM 1. Introduction 传统遥感局限…...
Linux56 YUM源配置
epel未启动 显示系统未通过注册 配置YUM仓库 本地YUM仓库 1.备份 tar -zcf repo.tar.gz *.repo 2.挂载 mount -o ro /dev/sr0 /mnt 3.开机自启 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.编写本地YUM仓库 local.repo [local] namelocal yum …...
mysql 如何查询数据库链接日志
1,查看是否开启日志 SHOW GLOBAL VARIABLES LIKE general_log; -- 查看是否开启通用查询日志(包括连接记录) 1.1,假如没开启,可以临时开启,做测试;服务重启,配置失效…...
Element-Plus-X开源程序是Vue3 + Element-Plus 开箱即用的企业级AI组件库前端的解决方案
一、软件介绍 文末提供程序和源码下载 Element-Plus-X开源程序是Vue3 Element-Plus 开箱即用的企业级AI组件库前端的解决方案。 二、核心特性 ✨ 企业级 AI 组件:内置聊天机器人、语音交互等场景化组件🚀 零配置集成:基于 Element-Plus …...
基于DevSecOps敏捷框架的数字供应链安全应解决方案
基于DevSecOps敏捷框架的数字供应链安全应解决方案是以“AI智能代码疫苗技术”深度赋能原创专利级“多模态SCADevSecOpsSBOM情报预警”的第四代DevSecOps数字供应链安全管理体系,在DevSecOps敏捷安全体系建设、数字供应链安全审查、开源供应链安全治理和云原生安全体系建设四大…...
2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛初赛-wp
- -考试当场没做出来 后面做的 misc ❯ cd misc ❯ ls num.docx num.zip ❯ unzip num.docx Archive: num.docxinflating: [Content_Types].xmlinflating: _rels/.relsinflating: word/document.xmlinflating: word/_rels/document.xml.relsextracting: word/media/image1.jp…...
2、实验室测控系统 - /自动化与控制组件/lab-monitoring-system
76个工业组件库示例汇总 实验室测控系统开发组件 这是一个专为实验室设备数据采集与分析设计的可视化测控系统组件。采用工业风格界面设计,提供了丰富的动态数据展示与分析功能,可应用于各类实验室环境中的设备监控和数据处理。 功能特点 多设备管理…...
Blender插件机制设计与Python实现
Blender插件机制设计与Python实现 Blender的插件机制是其强大扩展性的核心,允许开发者通过Python创建自定义功能。下面我将详细介绍Blender插件系统的设计原理,并提供一个完整的示例。 Blender插件系统设计原理 模块化架构:Blender将插件作…...
自定义一个 Spring Boot Starter -笔记
SpringBoot Starter的介绍参考: Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。 1. 项目结构 创建一个 Maven 项目,结构如下: custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…...
【Part 2安卓原生360°VR播放器开发实战】第三节|实现VR视频播放与时间轴同步控制
《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化,以及高分辨率视频性能优化等实战技巧。 📝 希望通过这个专栏&am…...
读 书 说
好久没有坐下来手敲打字去输出或者记录分享一些比较正式的事情。 今天节后综合征,虽然我已经加了两天班了,但是还是不想加班便准点下班了。 今天来聊聊看书。 为什么会看书?最开始正如我之前提到过,人脉资源不多,也不…...
DOCX转PDF怎么操作最简单?快速将DOCX转换为专业PDF文档
在日常办公或学习中,我们经常需要将 Word 文档(.docx格式)转换为 PDF 文件。这不仅有助于保持文档格式的一致性,还能确保接收者无需特定软件即可查看文件内容。本文将详细介绍几种常见的方法来实现从 DOCX 到 PDF 的转换ÿ…...
免费轻量化办公pdf修改软件 一键格式转换基础修改到高级加密
各位办公软件小能手们!今天咱来聊聊一款超厉害的 PDF 编辑软件——PDFXEdit。你知道吗,这软件就像个 PDF 处理的超级魔法师,能全方位搞定 PDF 文档。下面我就给大家详细说说它的那些功能和适用场景。 首先是基础编辑功能。这软件在文本与图像…...
【HFP】蓝牙语音通信高级功能解析:快速拨号与呼叫等待协议实现
在蓝牙语音通信系统中,除了基础的通话建立与控制流程,高级功能如快速拨号(内存拨号、最后号码重拨)和呼叫等待通知的实现,直接影响着用户体验的便捷性与系统的实用性。这些功能依赖于蓝牙协议中特定的 AT 命令交互、状…...
CVE-2025-24813:Apache Tomcat RCE 漏洞分析
CVE-2025-24813 是 Apache Tomcat 中的一个严重远程代码执行 (RCE) 漏洞,源于路径等效缺陷,允许攻击者绕过安全约束并远程执行任意代码。 CYFIRMA 的研究发现了一些活跃的漏洞利用,一些 PoC 漏洞在地下论坛上流传。攻击者利用基于 HTTP PUT 的任意文件上传、NTFS 连接漏洞利…...
神经网络之训练的艺术:反向传播与常见问题解决之道
神经网络训练的艺术:反向传播与常见问题解决之道 摘要 神经网络是现代机器学习的核心工具之一,而反向传播则是其训练过程中不可或缺的算法。本文深入探讨了反向传播的工作原理以及在训练过程中常见的问题,如梯度消失、梯度爆炸、死 ReLU 单…...
小土堆pytorch--transform
torchvision中的transform torchvision中的transform1. transforms的使用1.1 transforms的结构及用法理论1.2 相应代码1.3 对上述代码的解释 2. 常见的transforms2.1 python 的call函数2.2 ToTensor的使用2.3 Normalize的使用2.4 Resize的使用2.5 Compose的使用2.6 RandomCrop的…...
【Django】REST 常用类
ModelSerializer serializers.ModelSerializer 是 Django REST framework(DRF)里的一个强大工具,它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它: 1. 基本概念 序列化是把 Django 模型实例转化…...
PyTorch常用命令详解:助力深度学习开发
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
第二章 Logback的架构(二)
Logger, Appenders 和 Layouts Appenders 和 Layouts 基于日志记录器选择性地启用或禁用日志记录请求只是其中的一部分功能。Logback允许将日志记录请求输出到多个目标。在Logback术语中,输出目标被称为Appender。 目前,已经存在适用于控制台、文件、远…...
【大数据】服务器上部署Apache Paimon
1. 环境准备 在开始部署之前,请确保服务器满足以下基本要求: 操作系统: 推荐使用 Linux(如 Ubuntu、CentOS)。 Java 环境: Paimon 依赖 Java,推荐安装 JDK 8 或更高版本。 Flink 环境: Paimon 是基于 Apache Flink 的…...
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
🌟 图像增强魔法指南 🎨 在图像处理的世界里,增强就像是给图片化妆,让它展现出最佳的状态。让我们一起来探索这些神奇的增强术吧! 📚 目录 基础概念 - 图像增强的"美容院"直方图均衡化 - 光线的…...
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
问题描述 Azure Cache for Redis 服务在传输和存储数据时是如何加密呢? 问题回答 一:关于Azure cache for Redis服务在数据传输过程中是如何加密的? 为了确保在Azure cache for Redis和客户端应用程序之间传输的数据安全,需要启用…...
Cursor 被封解决方案
一、注册一个无限邮箱 没事点点广告,让网站活久一点(✪ω✪) 2925邮箱-无限邮2925无限邮箱支持多种客户端收发邮件且数据安全加密多端同步。只需要注册一个账号,就能生成无限多个2925子邮箱账号,同时利用一邮多用功能对多个子邮箱邮件进行集…...
spring上传文件添加水印
1、实现 MultipartFile package com.pojo.common.core.domain;import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream;import org.springframework.lang.Nullable; import org.springframework.util.Assert; im…...
CSS分栏布局
分栏布局将区域划分为若干垂直的栏,子元素放置到栏中,填满一个后再填充下一个。如果设置了 column-count 栏数量或 column-width 栏宽度,元素就成为分栏容器。需要注意, column-width 实际上是最小栏宽度。浏览器使用这个值计算栏…...
通过 ModernBERT 实现零样本分类的性能提升
文本分类 是机器学习中最基础的任务之一,拥有悠久的研究历史和深远的实用价值。更重要的是,它是许多实际项目中不可或缺的组成部分,从搜索引擎到生物医学研究都离不开它。文本分类方法被广泛应用于科学论文分类、用户工单分类、社交媒体情感分…...
【AI】Ubuntu 22.04 4060Ti 16G vllm-api部署Qwen3-8B-FP8
下载模型 # 非常重要,否则容易不兼容报错 pip install modelscope -U cd /data/ai/models modelscope download --model Qwen/Qwen3-8B-FP8 --local_dir ./Qwen3-8B-FP8 安装vllm 创建虚拟环境 mkdir vllm cd vllm/ python -m venv venv ource venv/bin/activat…...
QML ProgressBar控件详解
在 QML 中,ProgressBar 是一个常用的进度条控件,用于显示任务的完成进度。以下是 ProgressBar 的详细用法,包括基本用法、自定义样式、动态绑定数据等。 1. 基本用法 1.1 最简单的 ProgressBar import QtQuick.Controls 2.15ProgressBar {w…...
STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
前言: 本文主要介绍了单片机的通讯协议和STM32的串口USART通讯的原理及分析。 通信的目的 将一个设备的数据传送到另一个设备,扩展硬件系统。 通信协议 指定通信的规则,通信双方按照协议规则进行数据收发。 STM32常见通讯协议 各通讯特点 USART: TX(发送)、RX(接…...