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

Datawhale AI春训营 世界科学智能大赛--合成生物赛道:蛋白质固有无序区域预测 小白经验总结

一、报名大赛

二、跑通baseline

在魔塔社区创建实例,根据教程完成速通第一个分数~

Datawhale-学用 AI,从此开始

三、优化实例(这里是我的学习优化过程)

1.先将官方给的的模型训练实例了解一遍(敲一敲代码)

训练模型nn_baseline

导入必要的库

import argparse  # 解析命令行参数
import math      # 数学运算(如log)
import pickle    # 加载.pkl数据文件import torch     # PyTorch深度学习框架
import torch.nn as nn  # 神经网络模块
import torch.nn.functional as F  # 激活函数等from tqdm import tqdm  # 进度条显示
from omegaconf import OmegaConf  # 配置文件管理
from sklearn.metrics import f1_score  # 评估指标
from torch.utils.data import Dataset, DataLoader  # 数据加载
from torch.nn import TransformerEncoderLayer, TransformerEncoder  # Transformer模块

定义常量氨基酸类型序列

restypes = [  # 20种标准氨基酸'A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I','L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V'
]
unsure_restype = 'X'  # 不确定的氨基酸类型
unknown_restype = 'U'  # 未知氨基酸类型

处理数据集

#数据集处理
def make_dataset(data_config,train_rate=0.7,valid_rate=0.2):data_path = data_config.data_path  #从配置获取数据路径with open(data_path,'rb') as f:  #加载.pkl文件data = pickle.load(f)  #反序列化数据total_number = len(data)  #数据总量train_sep = int(total_number * train_rate)  #训练集结束索引valid_sep = int(total_number * (train_rate + valid_rate))  #训练集结束索引train_data_dicts = data[:train_sep]  #训练集valid_data_dicts = data[train_sep:valid_sep]  #训练集test_data_dicts = data[valid_sep:]  #测试集train_dataset = DisProtDataset(train_data_dicts)valid_dataset = DisProtDataset(valid_data_dicts)test_dataset = DisProtDataset(test_data_dicts)return train_dataset,valid_dataset,test_dataset#处理数据格式
class DisProtDataset(Dataset):def __init__(self,dict_data):sequences = [d['sequence'] for d in dict_data]  #提取所有序列labels = [d['label'] for d in dict_data]  #提取所有标签assert len(sequences) == len(labels)self.sequences = sequencesself.labels = labelsself.residue_mapping = {'X':20}  #未知氨基酸'X'映射为索引20self.residue_mapping.update(dict(zip(restypes,range(len(restypes)))))def __len__(self):return len(self.sequences)  #返回数据集样本数def __getitem__(self, idx):#将序列转为one-hot编码sequence = torch.zeros(len(self.sequences[idx]),len(self.residue_mapping))for i,c in enumerate(self.sequences[idx]):if c not in restypes:  #非标准氨基酸替换为‘X’c = 'X'sequence[i][self.residue_mapping[c]] = 1  #one-hot赋值#标签转为Tensorlabel = torch.tensor([int(c) for c in self.labels[idx]],dtype=torch.long)return sequence,label

添加模型组件

class DisProtModel(nn.Module):  #主模型def __init__(self,model_config):self.d_model = model_config.d_model  # 特征维度self.n_head = model_config.n_head  # 注意力头数self.n_layer = model_config.n_layer  # Transformer层数#输入层self.input_layer = nn.Linear(model_config.i_dim,self.d_model)  #将输入维度 i_dim投影到 d_modelself.position_embed = PositionalEncoding(self.d_model,max_len=20000)  #添加位置信息,支持最长20000的序列self.input_norm = nn.LayerNorm(self.d_model)  #对特征维度归一化,稳定训练self.dropout_in = nn.Dropout(p=0.1)  #防止过拟合,丢弃率10%#Transformer编码器encoder_layer = TransformerEncoderLayer(d_model=self.d_model,nhead=self.n_head,activation='gelu',  #GELU激活batch_first=True  #输入格式为 (batch, seq, dim))self.transformer = TransformerEncoder(encoder_layer,num_layers=self.n_layer)#输出层self.output_layer = nn.Sequential(nn.Linear(self.d_model,self.d_model),nn.GELU(),nn.Dropout(p=0.1),nn.Linear(self.d_model,model_config.o_dim)  #输出维度,通常为2)#前向传播def forward(self,x):x = self.input_layer(x)  #线性变换x = self.position_embed(x)  #位置编码x = self.input_norm(x)  #层归一化x = self.dropout_in(x)  #Dropoutx = self.transformer(x)  #Transformer编码x = self.output_layer(x)  #分类头return x

评估指标

def metric_fn(pred,gt):pred = pred.detach().cpu()  #脱离计算图,转到CPUgt = gt.detach().cpu()pred_labels = torch.argmax(pred, dim=-1).view(-1)  # 取预测类别gt_labels = gt.view(-1)  # 展平真实标签score = f1_score(y_true=gt_labels, y_pred=pred_labels, average='micro')  # 计算F1return score

主要训练逻辑

if __name__ == '__main__':device = 'cuda' if torch.cuda.is_available() else 'cpu'  # 自动选择设备# 解析命令行参数(如--config_path)parser = argparse.ArgumentParser('IDRs prediction')parser.add_argument('--config_path', default='./config.yaml')args = parser.parse_args()config = OmegaConf.load(args.config_path)  # 加载配置文件#数据准备train_dataset, valid_dataset, test_dataset = make_dataset(config.data)train_dataloader = DataLoader(dataset=train_dataset, **config.train.dataloader)valid_dataloader = DataLoader(dataset=valid_dataset, batch_size=1, shuffle=False)#模型初始化model = DisProtModel(config.model)model = model.to(device)#优化器与损失函数optimizer = torch.optim.AdamW(model.parameters(),  #比Adam更优的权重衰减处理lr=config.train.optimizer.lr,weight_decay=config.train.optimizer.weight_decay)loss_fn = nn.CrossEntropyLoss()#初始验证model.eval()metric = 0.with torch.no_grad():for sequence, label in valid_dataloader:sequence = sequence.to(device)label = label.to(device)pred = model(sequence)metric += metric_fn(pred, label)print("init f1_score:", metric / len(valid_dataloader))#训练循环for epoch in range(config.train.epochs):progress_bar = tqdm(train_dataloader, desc=f"epoch:{epoch:03d}")model.train()total_loss = 0.for sequence, label in progress_bar:sequence = sequence.to(device)label = label.to(device)pred = model(sequence)loss = loss_fn(pred.permute(0, 2, 1), label)  # 调整维度progress_bar.set_postfix(loss=loss.item())total_loss += loss.item()optimizer.zero_grad()loss.backward()optimizer.step()avg_loss = total_loss / len(train_dataloader)#验证阶段model.eval()metric = 0.with torch.no_grad():for sequence, label in valid_dataloader:sequence = sequence.to(device)label = label.to(device)pred = model(sequence)metric += metric_fn(pred, label)print(f"avg_training_loss: {avg_loss}, f1_score: {metric / len(valid_dataloader)}")

注意:在这里想要跑通,一定要把数据集WSAA_data_public.pkl文件和config.yaml文件放在合适的目录下。

在本地跑通的效果

2.了解可以优化的方向

(1)词向量

词向量(Word Embedding)是自然语言处理(NLP)中的一种重要技术,用于将词汇映射到低维连续向量空间,使得语义和语法相似的词在向量空间中距离相近。

方法:词向量+机器学习

①训练词向量

使用gensim 库的 Word2Vec 模型对氨基酸序列进行词向量训练。

将每个蛋白质序列转换为由空格分隔的字符串( ' '.join(x["sequence"]) ),形成句子列表。

vector_size=100 :词向量的维度为 100。

min_count=1 :至少出现一次的单词才会被考虑。

训练完成后,model_w2v 包含了每个氨基酸的词向量表示。

datas = pickle.load(open("WSAA_data_public.pkl", "rb"))model_w2v = gensim.models.Word2Vec(sentences=[' '.join(x["sequence"]) for x in datas], vector_size=100, min_count=1)

②编码词向量

对于序列中的每个氨基酸,提取其上下文窗口内的词向量,并计算平均值作为特征。

sequence[max(0, idx-2): min(len(sequence), idx+2)]:获取当前氨基酸及其前后两个氨基酸的窗口。

model_w2v.wv[...]:获取窗口内氨基酸的词向量。

.mean(0) :对窗口内的词向量取平均值,得到一个固定维度的特征向量

将特征向量添加到data_x,将对应的标签添加到data_y

data_x = []
data_y = []
for data in datas:sequence = list(data["sequence"])for idx, (_, y) in enumerate(zip(sequence, data['label'])):data_x.append(model_w2v.wv[sequence[max(0, idx-2): min(len(sequence), idx+2)]].mean(0))data_y.append(y)

③训练贝叶斯模型

使用GaussianNB (高斯朴素贝叶斯)分类器对提取的特征进行训练。

model.fit(data_x, data_y) :将特征和标签传入模型进行训练。

model = GaussianNB()
model.fit(data_x, data_y)dump((model, model_w2v), "model.pkl")

(2)BERT模型

BERT(Bidirectional Encoder Representations from Transformers)是由 Google 在 2018 年提出的一种预训练语言模型。BERT 的核心特点是其双向性,即它能够同时考虑上下文的左右信息,从而生成更准确的语言表示。这种双向性使得 BERT 在理解词语的多义性和上下文关系方面表现出色。

方法:BERT实体识别

①数据预处理

序列编码:将蛋白质的氨基酸序列转换为BERT可以处理的格式。每个氨基酸可以用单字母表示(如A、C、D等)。由于BERT是基于字符的模型,可以直接将氨基酸序列作为输入。

标签处理:将每个氨基酸位置的无序区域标签(0或1)作为目标标签。例如, 1 表示该位置属于无序区域,0 表示不属于无序区域。

分词:虽然蛋白质序列是连续的氨基酸序列,但可以将其视为一个“句子”,每个氨基酸视为一个“词”。BERT的输入格式通常是一个序列,因此可以直接将整个氨基酸序列作为输入。

②加载bert模型

微调(Fine-tuning):将预训练的BERT模型用于特定任务(如蛋白质固有无序区域预测)。在微调阶段,BERT模型的权重会根据蛋白质序列数据进行调整,以更好地适应任务需求。

输出层设计:在BERT的输出层添加一个分类层,用于预测每个氨基酸位置是否属于无序区域。具体来说,BERT的输出是一个序列的隐藏状态,每个位置的隐藏状态可以通过一个全连接层(Dense Layer)和激活函数(如Sigmoid)来预测二分类标签(0或1)。

③模型微调

损失函数:使用二分类交叉熵损失函数(Binary Cross-Entropy Loss)来训练模型。该损失函数适用于二分类问题,能够衡量模型预测值与真实标签之间的差异。

优化器:使用Adam优化器,这是一种常用的优化器,适用于深度学习任务。

(3)GPT大模型

GPT(Generative Pre-trained Transformer)是由 OpenAI 开发的一系列自然语言处理模型,基于 Transformer 架构的解码器部分,通过大规模语料库的预训练,学习语言的统计规律,并能够生成连贯、自然的文本。

GPT 模型采用自回归(Autoregressive)的方式生成文本,即在给定前面的文本基础上逐步预测并生成下一个词。其核心架构是 Transformer 的解码器部分,利用多头自注意力机制捕捉句子中单词之间的关系,并通过前馈神经网络进行非线性变换。与传统的循环神经网络(RNN)不同,Transformer 能够在一个时间步中并行计算整个输入序列,大大加快了训练和推理速度。

GPT 使用单向 Transformer 解码器,通过自回归语言模型训练,预测句子中的下一个词。这种单向训练方式使得 GPT 在生成连贯文本时表现强大,但对上下文的理解相对较弱。

方法:如微调类似GPT的Qwen

①数据预处理

指令微调使模型能够更准确地识别和理解用户指令的意图。

LLM 的微调一般指指令微调过程。所谓指令微调,是说我们使用的微调数据形如:

{"instruction": "回答以下用户问题,仅输出答案。","input": "1+1等于几?","output": "2"
}

其中, instruction 是用户指令,告知模型其需要完成的任务; input 是用户输入,是完成用户指令所必须的输入内容; output 是模型应该给出的输出。

②加载Qwen模型

模型以半精度形式加载,如果你的显卡比较新的话,可以用 torch.bfolat 形式加载。对于自定义的模型一定要指定 trust_remote_code 参数为 True 。

tokenizer = AutoTokenizer.from_pretrained('/root/autodl-tmp/qwen/Qwen2.5-7B-Instruct/', use_fast=False, trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained('/root/autodl-tmp/qwen/Qwen2.5-7B-Instruct/', device_map="auto",torch_dtype=torch.bfloat16)

③模型微调

使用一种用于大模型微调的技术LoRA(Low-Rank Adaptation)。、

task_type :模型类型

target_modules :需要训练的模型层的名字,主要就是 attention 部分的层,不同的模型对应的层的名字不同,可以传入数组,也可以字符串,也可以正则表达式。

config = LoraConfig(task_type=TaskType.CAUSAL_LM,target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],inference_mode=False, # 训练模式r=8, # Lora 秩lora_alpha=32, # Lora alaph,具体作用参见 Lora 原理lora_dropout=0.1# Dropout 比例
)

3.尝试一个优化方向

在这里我选择了BERT模型进行优化源代码,不过由于竞赛的保密性,在这里暂时不放上代码了,那就期待一下赛事结束未完待续。。。

相关文章:

Datawhale AI春训营 世界科学智能大赛--合成生物赛道:蛋白质固有无序区域预测 小白经验总结

一、报名大赛 二、跑通baseline 在魔塔社区创建实例,根据教程完成速通第一个分数~ Datawhale-学用 AI,从此开始 三、优化实例(这里是我的学习优化过程) 1.先将官方给的的模型训练实例了解一遍(敲一敲代码) 训练模…...

基于Java(Struts2 + Hibernate + Spring)+MySQL实现的(Web)在线预约系统

基于Struts2 Hibernate Spring的在线预约系统 1.引言 1.1编写目的 针对医院在线预约挂号系统,提供详细的设计说明,包括系统的需求、功能模块、界面设计、设计方案等,以辅助开发人员顺利进行系统的开发并让项目相关者可以对这个系统进行分…...

PHP获取大文件行数

在PHP中获取大文件的行数时,直接读取整个文件到内存中可能会导致内存溢出,特别是对于非常大的文件。因此,最有效的方法是逐行读取文件并计数。以下是一些实现方法: 方法一:使用 fgets() fgets() 函数逐行读取文件&am…...

2024年网站开发语言选择指南:PHP/Java/Node.js/Python如何选型?

2024年网站开发语言选择指南:PHP/Java/Node.js/Python如何选型? 一、8大主流Web开发语言技术对比 1. PHP开发:中小型网站的首选方案 最新版本:PHP 8.3(2023年11月发布)核心优势: 全球78%的网站…...

Win7模拟器2025中文版:重温经典,掌上电脑体验

随着科技的快速发展,现代操作系统变得越来越高级,但许多用户仍然怀念经典的Windows 7系统。如果你也想重温那种熟悉的操作体验,Win7模拟器2025中文版 是一个不错的选择。这款软件能够让你在手机上轻松实现Windows 7系统的模拟,带来…...

HTML5+CSS3小实例:CSS立方体

实例:CSS立方体 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&q…...

使用 Vite 快速搭建现代化 React 开发环境

1.检查环境 说明&#xff1a;检测环境&#xff0c;node版本为18.20.6。 2.创建命令 说明&#xff1a;创建命令&#xff0c;选择对应的选项。 npm create vitelatest 3.安装依赖 说明&#xff1a;安装相关依赖。 npm i...

Linux网络编程——基于ET模式下的Reactor

一、前言 上篇文章中我们已经讲解了多路转接剩下的两个接口&#xff1a;poll和epoll&#xff0c;并且知道了epoll的两种工作模式分别是 LT模式和ET模式&#xff0c;下来我们就实现的是一个简洁版的 Reactor&#xff0c;即半同步半异步I/O&#xff0c;在linux网络中&#xff0c…...

【现代深度学习技术】循环神经网络04:循环神经网络

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

1. 认识DartGoogle为Flutter选择了Dart语言已经是既

1. 认识Dart Google为Flutter选择了Dart语言已经是既定的事实&#xff0c;无论你多么想用你熟悉的语言&#xff0c;比如JavaScript、TypeScript、ArkTS等来开发Flutter&#xff0c;至少目前都是不可以的。 Dart 是由谷歌开发的计算机编程语言&#xff0c;它可以被应用于 Web/…...

学习设计模式《三》——适配器模式

一、基础概念 适配器模式的本质是【转换匹配&#xff0c;复用功能】&#xff1b; 适配器模式定义&#xff1a;将一个类的接口转换为客户希望的另外一个接口&#xff1b;适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式的目的&#xff1a;复用…...

【Java面试系列】Spring Boot微服务架构下的分布式事务处理与性能优化 - 2025-04-19详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Boot微服务架构下的分布式事务处理与性能优化 - 2025-04-19详解 - 3-5年Java开发必备知识 引言 在微服务架构中&#xff0c;分布式事务处理和性能优化是面试中高频出现的主题。随着系统规模的扩大&#xff0c;如何保证数据一致性和系统性能成为开发者…...

Elasticsearch只返回指定的字段(用_source)

在Elasticsearch中&#xff0c;当你想要查询文档但不返回所有字段&#xff0c;只返回指定的字段&#xff08;比如这里的id字段&#xff09;&#xff0c;你可以使用_source参数来实现这一点。但是&#xff0c;有一点需要注意&#xff1a;Elasticsearch的_source字段默认是返回的…...

【Linux “sed“ 命令详解】

本章目录: 1. 命令简介sed 的优势&#xff1a; 2. 命令的基本语法和用法基本语法&#xff1a;参数说明&#xff1a;常见用法场景&#xff1a;示例1&#xff1a;替换文本示例2&#xff1a;删除空行示例3&#xff1a;从命令输出中处理内容 3. 命令的常用选项及参数常用命令动作&a…...

JMETER使用

接口测试流程: 1.获取接口文档&#xff0c;熟悉接口业务 2.编写接口测试用例以及评审 正例:输入正常的参数&#xff0c;验证接口能否正常返回 反例:权限异常(为空、错误、过期)、参数异常(为空、长度异常、类型异常)、其他异常(黑名单、调用次数限制)、兼容异常(一个接口被多种…...

JavaWeb 课堂笔记 —— 13 MySQL 事务

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…...

离线安装elasticdump并导入和导出数据

离线安装elasticdump 在 CentOS 或 RHEL 系统上安装 elasticdump&#xff0c;你可以使用 npm&#xff08;Node.js 的包管理器&#xff09;来安装&#xff0c;因为 elasticdump 是一个基于 Node.js 的工具。以下是步骤 先在外网环境下安装 下载nodejs和npm&#xff08;注意x8…...

WhatTheDuck:一个基于浏览器的CSV查询工具

今天给大家介绍一个不错的小工具&#xff1a;WhatTheDuck。它是一个免费开源的 Web 应用程序&#xff0c;允许用户上传 CSV 文件并针对其内容执行 SQL 查询分析。 WhatTheDuck 支持 SQL 代码自动完成以及语法高亮。 WhatTheDuck 将上传的数据存储为 DuckDB 内存表&#xff0c;继…...

关于数字信号与图像处理——基于Matlab的图像增强技术

本篇博客是在做数字信号与图像处理实验中的收获。 具体内容包括&#xff1a;根据给定的代码放入Matlab中分别进行两次运行测试——比较并观察运行后的实验结果与原图像的不同点——画出IJ的直方图&#xff0c;并比较二者差异。接下来会对每一步进行具体讲解。 题目&#xff1a…...

MySQL数据库 - 锁

锁 此笔记参考黑马教程&#xff0c;仅学习使用&#xff0c;如有侵权&#xff0c;联系必删 文章目录 锁1. 概述1.1 介绍1.2 分类 2. 全局锁2.1 介绍2.2 语法2.3 特点&#xff08;弊端&#xff09; 3. 表级锁3.1 介绍3.2 表锁3.3 元数据锁&#xff08;meta data lock&#xff0…...

免费多平台运行器,手机畅玩经典主机大作

软件介绍 飞鸟模拟器是一款面向安卓设备的免费游戏平台&#xff0c;支持PS2/PSP/NDS等十余种经典主机游戏运行。 该软件突破传统模拟器复杂操作模式&#xff0c;采用智能核心加载技术&#xff0c;用户只需双击主程序即可开启游戏之旅&#xff0c;真正实现"即下即玩"…...

计算机软考中级 知识点记忆——排序算法 冒泡排序-插入排序- 归并排序等 各种排序算法知识点整理

一、&#x1f4cc; 分类与比较 排序算法 最优时间复杂度 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性 应用场景与特点 算法策略 冒泡排序 O(n) O(n) O(n) O(1) 稳定 简单易实现&#xff0c;适用于小规模数据排序。 交换排序策略 插入排序 O(n) O(n) O…...

STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统

STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统 Norflash简介NorFlash操作驱动代码文件系统测试代码 Norflash简介 NOR Flash是一种类型的非易失性存储器&#xff0c;它允许在不移除电源的情况下保留数据。NOR Flash的名字来源于其内部结构中使用的NOR逻辑门。…...

uniapp-x 二维码生成

支持X&#xff0c;二维码生成&#xff0c;支持微信小程序&#xff0c;android&#xff0c;ios&#xff0c;网页 - DCloud 插件市场 免费的单纯用爱发电的...

当HTTP遇到SQL注入:Java开发者的攻防实战手册

一、从HTTP请求到数据库查询:漏洞如何产生? 危险的参数拼接:Servlet中的经典错误 漏洞代码重现: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String category = request.getParameter("…...

[dp20_完全背包] 介绍 | 零钱兑换

目录 1. 完全背包 题解 背包必须装满 2.零钱兑换 题解 1. 完全背包 链接&#xff1a; DP42 【模板】完全背包 描述 你有一个背包&#xff0c;最多能容纳的体积是V。 现在有n种物品&#xff0c;每种物品有任意多个&#xff0c;第i种物品的体积为vivi ,价值为wiwi。 &a…...

精打细算 - GPU 监控

精打细算 - GPU 监控 在上一篇,咱们历经千辛万苦,终于让应用程序在 Pod 的“驾驶舱”里成功地“点火”并用上了 GPU。太棒了!但是,车开起来是一回事,知道车速多少、油耗多少、引擎水温是否正常,则是另一回事,而且同样重要,对吧? 我们的 GPU 应用跑起来了,但新的问题…...

故障诊断 | CNN-BiGRU-Attention故障诊断

效果一览 摘要 在现代工业生产中,设备的稳定运行至关重要,故障诊断作为保障设备安全、高效运行的关键技术,其准确性和及时性直接影响着生产效率与成本[[doc_refer_1]][[doc_refer_2]]。随着工业设备复杂性的不断增加,传统故障诊断方法已难以满足实际需求。深度学习技术凭借…...

单片机AIN0、AIN1引脚功能

目录 1. 模拟-数字转换器&#xff08;ADC&#xff09; 2. 交流电源&#xff08;AC&#xff09; 总结 这两部分有什么区别&#xff1f; 在这个电路图中&#xff0c;两个部分分别是模拟-数字转换器&#xff08;ADC&#xff09;和交流电源&#xff08;AC&#xff09;。以下是这…...

交换机与路由器的主要区别:深入分析其工作原理与应用场景

在现代网络架构中&#xff0c;交换机和路由器是两种至关重要的设备。它们在网络中扮演着不同的角色&#xff0c;但很多人对它们的工作原理和功能特性并不十分清楚。本文将深入分析交换机与路由器的主要区别&#xff0c;并探讨它们的工作原理和应用场景。 一、基本定义 1. 交换…...

uniApp小程序保存定制二维码到本地(V3)

这里的二维码组件用的 uv-ui 的二维码 可以按需引入 QRCode 二维码 | 我的资料管理-uv-ui 是全面兼容vue32、nvue、app、h5、小程序等多端的uni-app生态框架 <uv-qrcode ref"qrcode" :size"280" :value"payCodeUrl"></uv-qrcode>&l…...

手机投屏到电视方法

一、投屏软件 比如乐播投屏 二、视频软件 腾讯视频、爱奇艺 三、手机无线投屏功能 四、有线投屏 五、投屏器...

桌面应用UI开发方案

一、基于 Web 技术的跨平台方案 Electron Python/Go 特点&#xff1a; 技术栈&#xff1a;前端使用 HTML/CSS/JS&#xff0c;后端通过 Node.js 集成 Python/Go 模块或服务。 跨平台&#xff1a;支持 Windows、macOS、Linux 桌面端&#xff0c;适合开发桌面应用。 生态成熟&…...

FFmpeg+Nginx+VLC打造M3U8直播

一、视频直播的技术原理和架构方案 直播模型一般包括三个模块&#xff1a;主播方、服务器端和播放端 主播放创造视频&#xff0c;加美颜、水印、特效、采集后推送给直播服务器 播放端&#xff1a; 直播服务器端&#xff1a;收集主播端的视频推流&#xff0c;将其放大后推送给…...

山东科技大学深度学习考试回忆

目录 一、填空&#xff08;五个空&#xff0c;十分&#xff09; 二、选择题(五个&#xff0c;十分&#xff09; 三、判断题&#xff08;五个&#xff0c;五分&#xff09; 四、论述题&#xff08;四个&#xff0c;四十分&#xff09; 五、计算题&#xff08;二个&#xff…...

【Flutter动画深度解析】性能与美学的完美平衡之道

Flutter的动画系统是其UI框架中最引人注目的部分之一&#xff0c;它既能创造令人惊艳的视觉效果&#xff0c;又需要开发者对性能有深刻理解。本文将深入剖析Flutter动画的实现原理、性能优化策略以及设计美学&#xff0c;帮助你打造既流畅又美观的用户体验。 一、Flutter动画核…...

【嵌入式】——Linux系统远程操作和程序编译

目录 一、虚拟机配置网络设置 二、使用PuTTY登录新建的账户 1、在ubuntu下开启ssh服务 2、使用PuTTY连接 三、树莓派实现远程登录 四、树莓派使用VNC viewer登录 五、Linux使用talk聊天程序 1、使用linux自带的talk命令 2、使用c语言编写一个talk程序 一、虚拟机配置网络…...

零、HarmonyOS应用开发者基础学习总览

零、HarmonyOS应用开发者基础认证 1 整体学习内容概览 1 整体学习内容概览 通过系统化的课程学习&#xff0c;熟练掌握 DevEco Studio&#xff0c;ArkTS&#xff0c;ArkUI&#xff0c;预览器&#xff0c;模拟器&#xff0c;SDK 等 HarmonyOS 应用开发的关键概念&#xff0c;具…...

记录一次项目中使用pdf预览过程以及遇到问题以及如何解决

背景 项目中现有的pdf浏览解析不能正确解析展示一些pdf文件&#xff0c;要么内容一直在加载中展示不出来&#xff0c;要么展示的格式很凌乱 解决 方式一&#xff1a;&#xff08;优点&#xff1a;比较无脑&#xff0c;缺点&#xff1a;不能解决遇到的一些特殊问题&#xff0…...

致远OA——自定义开发rest接口

文章目录 :apple: 业务流程 &#x1f34e; 业务流程 代码案例&#xff1a; https://pan.quark.cn/s/57fa808c823f 官方文档&#xff1a; https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登录系统 —— 后台管理 —— 切换系…...

STL之vector基本操作

写在前面 我使用的编译器版本是 g 11.4.0 &#xff08;Ubuntu 22.04 默认版本&#xff09;&#xff0c;支持C17的全部特性&#xff0c;支持C20的部分特性。 vector的作用 我们知道vector是动态数组&#xff08;同时在堆上存储数组元素&#xff09;&#xff0c;我们在不确定数…...

dac直通线还是aoc直通线? sfp使用

"DAC直通线" 和 "AOC直通线" 都是高速互连线缆&#xff0c;用于数据中心、服务器、交换机等设备之间的高速互连。它们的选择主要取决于以下几个方面&#xff1a; &#x1f50c; DAC&#xff08;Direct Attach Cable&#xff0c;直连铜缆&#xff09; 材质&…...

【Linux篇】探索进程间通信:如何使用匿名管道构建高效的进程池

从零开始&#xff1a;通过匿名管道实现进程池的基本原理 一. 进程间通信1.1 基本概念1.2 通信目的1.3 通信种类1.3.1 同步通信1.3.2 异步通信 1.4 如何通信 二. 管道2.1 什么是管道2.2 匿名管道2.2.1 pipe()2.2.2 示例代码&#xff1a;使用 pipe() 进行父子进程通信2.2.3 管道容…...

Mixture-of-Experts with Expert Choice Routing:专家混合模型与专家选择路由

摘要 稀疏激活的专家混合模型(MoE)允许在保持每个token或每个样本计算量不变的情况下,大幅增加参数数量。然而,糟糕的专家路由策略可能导致某些专家未被充分训练,从而使得专家在特定任务上过度或不足专业化。先前的研究通过使用top-k函数为每个token分配固定数量的专家,…...

ai学习中收藏网址【1】

https://github.com/xuwenhao/geektime-ai-course课程⾥所有的代码部分&#xff0c;通过 Jupyter Notebook 的形式放在了 GitHub 上 https://github.com/xuwenhao/geektime-ai-course 图片创作 https://www.midjourney.com/explore?tabtop 创建填⾊本 How to Create Midjour…...

【滑动窗口】最⼤连续 1 的个数 III(medium)

⼤连续 1 的个数 III&#xff08;medium&#xff09; 题⽬描述&#xff1a;解法&#xff08;滑动窗⼝&#xff09;&#xff1a;算法思路&#xff1a;算法流程&#xff1a; C 算法代码&#xff1a;Java 算法代码&#xff1a; 题⽬链接&#xff1a;1004. 最⼤连续 1 的个数 III …...

ClawCloud的免费空间(github用户登录可以获得$5元/月的免费额度)

免费的空间 Welcome to ClawCloud Lets create your workspace 官网&#xff1a;ClawCloud | Cloud Infrastructure And Platform for Developers 区域选择新加坡 然后这个页面会变成新加坡区域&#xff0c;再按一次确定&#xff0c;就创建好了工作台。 初始界面&#xff0…...

sql之DML(insert、delete、truncate、update、replace))

&#x1f3af; 本文专栏&#xff1a;MySQL深入浅出 &#x1f680; 作者主页&#xff1a;小度爱学习 数据库使用时&#xff0c;大多数情况下&#xff0c;开发者只会操作数据&#xff0c;也是就增删改查&#xff08;CRUD&#xff09;。 增删改查四条语句&#xff0c;最重要的是查…...

Spring Boot常用注解全解析:从入门到实战

&#x1f331; Spring Boot常用注解全解析&#xff1a;从入门到实战 #SpringBoot核心 #注解详解 #开发技巧 #高效编程 一、核心启动与配置注解 1. SpringBootApplication 作用&#xff1a;标记主启动类&#xff0c;整合了Configuration、EnableAutoConfiguration和Component…...

Python 赋能区块链教育:打造去中心化学习平台

Python 赋能区块链教育:打造去中心化学习平台 引言 区块链技术正在重塑全球多个行业,而教育领域也不例外。传统的在线学习平台往往依赖中心化存储和管理模式,导致数据安全、用户隐私、资源共享等问题难以解决。而随着 Web 3.0 的发展,区块链在教育场景中的应用逐渐受到关…...