特征交叉-MaskNet文章总结代码实现
MaskNet 这个模型是微博21年提出的,23年twitter(X)开源的推荐系统排序模块使用的backbone结构。
核心思想是认为DNN为主的特征交叉是addictive,交叉效率不高;所以设计了一种multiplicatvie的特征交叉
如何设计muliplicative特征交叉呢?
1)首先设计了一个instance-guide-mask,下图是instance-guide-mask的设计,其实就是两层feed-forward-layer,第一层把原始输入维度扩增,第二层再还原回去,总结而言,就是这个公式:
V m a s k = W d 2 ( R e l u ( W d 1 V e m b + β d 1 ) ) + β d 2 V_{mask} = W_{d2}(Relu(W_{d1} V_{emb} + \beta_{d1})) + \beta_{d2} Vmask=Wd2(Relu(Wd1Vemb+βd1))+βd2
𝑉 𝑒 𝑚 𝑏 ∈ R 𝑚 = 𝑓 × 𝑘 𝑉_{𝑒𝑚𝑏}∈ R^{𝑚=𝑓 ×𝑘} Vemb∈Rm=f×k 输入的embedding结果, f是输入特征的数量,k是特征embedding维度。
最终输出的是一个处理后的embedding向量,后面简称为mask
2) 这个embedding得到后,怎么使用呢,这个就是MaskBlock干的事情。
主要有两种使用,一个是对embedding进行处理,图里LN-EMB里的LN指的是Layer Normalization
V 𝑚 𝑎 𝑠 𝑘 𝑒 𝑑 𝐸 𝑀 𝐵 = V 𝑚 𝑎 𝑠 𝑘 ⊙ L N _ E M B ( V 𝑒 𝑚 b ) V_{𝑚𝑎𝑠𝑘𝑒𝑑𝐸𝑀𝐵} = V_{𝑚𝑎𝑠𝑘} ⊙ LN\_EMB(V_{𝑒𝑚b}) VmaskedEMB=Vmask⊙LN_EMB(Vemb), 把mask的结果和LN-EMB 进行element-wide product, 然后在接一个linear,LN后应用在Relu做下非线性激活,这个就是MaskBLock的全部了, 总结成一个公式:
V o u t p u t = L N _ H I D ( W i V m a s k e d E M B ) = R e L U ( L N ( W i ( V m a s k ⊙ L N _ E M B ( V 𝑒 𝑚 b ) ) ) V_{output} = LN\_HID(W_i V_{maskedEMB}) = ReLU(LN(W_i (V_{mask} ⊙ LN\_EMB(V_{𝑒𝑚b}))) Voutput=LN_HID(WiVmaskedEMB)=ReLU(LN(Wi(Vmask⊙LN_EMB(Vemb)))
除了对Embedding进行element-wide-product,还可以对神经网络的输出再和mask做一次处理,这个就是另一种mask的应用方式:
V o u t p u t = L N _ H I D ( W i V m a s k d H I D ) = R e L U ( L N ( W i ( V m a s k ⊙ V o u t p u t p ) ) ) V_{output} = LN\_HID(W_i V_{maskdHID}) = ReLU(LN(W_i(V_{mask} ⊙ V_{output}^p))) Voutput=LN_HID(WiVmaskdHID)=ReLU(LN(Wi(Vmask⊙Voutputp)))
1) 2) 结束之后,文章的核心内容也基本结束,后面3)是MaskBlock的应用
3)MaskNet
所有特征都和Instance-guide-mask进行运算,可以是串行的也可以是并行的。
串行的第一个是一个MaskBlock on feature embedding,后面接的都是MaskBlock on MaskBlock;
并行的比较简单,每一个都是一个MaskBlock on feature embedding,然后concat到一起
二 Implementation
1)torch 代码实现,摘录自twitter开源代码:
def _init_weights(module):if isinstance(module, torch.nn.Linear):torch.nn.init.xavier_uniform_(module.weight)torch.nn.init.constant_(module.bias, 0)class MaskBlock(torch.nn.Module):def __init__(self, mask_block_config: config.MaskBlockConfig, input_dim: int, mask_input_dim: int) -> None:super(MaskBlock, self).__init__()self.mask_block_config = mask_block_configoutput_size = mask_block_config.output_sizeif mask_block_config.input_layer_norm: # twitter实现的这里layer normalization做了可配置的self._input_layer_norm = torch.nn.LayerNorm(input_dim)else:self._input_layer_norm = None# instace-guide-mask第一层aggregation的神经元数量配置# 如果指定了压缩量,就是input * 压缩量;如果没有,那么也可以手动指定大小if mask_block_config.reduction_factor:aggregation_size = int(mask_input_dim * mask_block_config.reduction_factor)elif mask_block_config.aggregation_size is not None:aggregation_size = mask_block_config.aggregation_sizeelse:raise ValueError("Need one of reduction factor or aggregation size.")# instance-guide-mask is here# 两层Linearself._mask_layer = torch.nn.Sequential(torch.nn.Linear(mask_input_dim, aggregation_size),torch.nn.ReLU(),torch.nn.Linear(aggregation_size, input_dim),)# 参数初始化self._mask_layer.apply(_init_weights)self._hidden_layer = torch.nn.Linear(input_dim, output_size)self._hidden_layer.apply(_init_weights)self._layer_norm = torch.nn.LayerNorm(output_size)def forward(self, net: torch.Tensor, mask_input: torch.Tensor):# LNif self._input_layer_norm:net = self._input_layer_norm(net)# self._mask_layer(mask_input)-- V_mask# net * V_maskhidden_layer_output = self._hidden_layer(net * self._mask_layer(mask_input))return self._layer_norm(hidden_layer_output)class MaskNet(torch.nn.Module):def __init__(self, mask_net_config: config.MaskNetConfig, in_features: int):super().__init__()self.mask_net_config = mask_net_configmask_blocks = []if mask_net_config.use_parallel:total_output_mask_blocks = 0# 从local_prod参数看,用了4个blockfor mask_block_config in mask_net_config.mask_blocks:mask_blocks.append(MaskBlock(mask_block_config, in_features, in_features))total_output_mask_blocks += mask_block_config.output_sizeself._mask_blocks = torch.nn.ModuleList(mask_blocks)else:input_size = in_featuresfor mask_block_config in mask_net_config.mask_blocks:mask_blocks.append(MaskBlock(mask_block_config, input_size, in_features))input_size = mask_block_config.output_sizeself._mask_blocks = torch.nn.ModuleList(mask_blocks)total_output_mask_blocks = mask_block_config.output_sizeif mask_net_config.mlp:self._dense_layers = mlp.Mlp(total_output_mask_blocks, mask_net_config.mlp)self.out_features = mask_net_config.mlp.layer_sizes[-1]else:self.out_features = total_output_mask_blocksself.shared_size = total_output_mask_blocksdef forward(self, inputs: torch.Tensor):if self.mask_net_config.use_parallel:# 并行化的网络结构实现mask_outputs = []# 对于多个Block,每一个block输入都是一样,只是其中学习到的参数有所不同for mask_layer in self._mask_blocks:# mask_input,net 都是inputsmask_outputs.append(mask_layer(mask_input=inputs, net=inputs)) # Share the outputs of the MaskBlocks.all_mask_outputs = torch.cat(mask_outputs, dim=1)# 最终输出处理output = (all_mask_outputsif self.mask_net_config.mlp is Noneelse self._dense_layers(all_mask_outputs)["output"])return {"output": output, "shared_layer": all_mask_outputs}else:# 串行net = inputsfor mask_layer in self._mask_blocks:# mask_input 是inputs,net输入是上一层的输出net = mask_layer(net=net, mask_input=inputs)# Share the output of the stacked MaskBlocks.output = net if self.mask_net_config.mlp is None else self._dense_layers[net]["output"]return {"output": output, "shared_layer": net}
2)tensorflow实现
摘录自EasyRec(阿里开源推荐工具)
# Copyright (c) Alibaba, Inc. and its affiliates.
import tensorflow as tf
from tensorflow.python.keras.layers import Activation
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.layers import Layer
from easy_rec.python.layers.keras.blocks import MLP
from easy_rec.python.layers.keras.layer_norm import LayerNormalization
from easy_rec.python.layers.utils import Parameterclass MaskBlock(Layer):"""MaskBlock use in MaskNet.Args:projection_dim: project dimension to reduce the computational cost.Default is `None` such that a full (`input_dim` by `aggregation_size`) matrixW is used. If enabled, a low-rank matrix W = U*V will be used, where Uis of size `input_dim` by `projection_dim` and V is of size`projection_dim` by `aggregation_size`. `projection_dim` need to be smallerthan `aggregation_size`/2 to improve the model efficiency. In practice, we'veobserved that `projection_dim` = d/4 consistently preserved theaccuracy of a full-rank version."""def __init__(self, params, name='mask_block', reuse=None, **kwargs):super(MaskBlock, self).__init__(name=name, **kwargs)self.config = params.get_pb_config()self.l2_reg = params.l2_regularizerself._projection_dim = params.get_or_default('projection_dim', None)self.reuse = reuseself.final_relu = Activation('relu', name='relu')def build(self, input_shape):if type(input_shape) in (tuple, list):assert len(input_shape) >= 2, 'MaskBlock must has at least two inputs'input_dim = int(input_shape[0][-1])mask_input_dim = int(input_shape[1][-1])else:input_dim, mask_input_dim = input_shape[-1], input_shape[-1]# 这里实现和pytorch一样if self.config.HasField('reduction_factor'):aggregation_size = int(mask_input_dim * self.config.reduction_factor)elif self.config.HasField('aggregation_size') is not None:aggregation_size = self.config.aggregation_sizeelse:raise ValueError('Need one of reduction factor or aggregation size for MaskBlock.')# instance-guide-mask第一层 self.aggr_layer = Dense(aggregation_size,activation='relu',kernel_initializer='he_uniform',kernel_regularizer=self.l2_reg,name='aggregation')# instance-guide-mask第二层self.weight_layer = Dense(input_dim, name='weights')# 对比pytorch实现,增加了projection_dim, 低秩矩阵(详见DCN)if self._projection_dim is not None:logging.info('%s project dim is %d', self.name, self._projection_dim)self.project_layer = Dense(self._projection_dim,kernel_regularizer=self.l2_reg,use_bias=False,name='project')if self.config.input_layer_norm:# 推荐在调用MaskBlock之前做好 layer norm,否则每一次调用都需要对input做lnif tf.__version__ >= '2.0':self.input_layer_norm = tf.keras.layers.LayerNormalization(name='input_ln')else:self.input_layer_norm = LayerNormalization(name='input_ln')if self.config.HasField('output_size'):self.output_layer = Dense(self.config.output_size, use_bias=False, name='output')# tensorflow遗留问题,兼容1/2if tf.__version__ >= '2.0':self.output_layer_norm = tf.keras.layers.LayerNormalization(name='output_ln')else:self.output_layer_norm = LayerNormalization(name='output_ln')super(MaskBlock, self).build(input_shape)def call(self, inputs, training=None, **kwargs):if type(inputs) in (tuple, list):net, mask_input = inputs[:2]else:net, mask_input = inputs, inputs# LNif self.config.input_layer_norm:net = self.input_layer_norm(net)# tensorflow实现aggregate层和projection层是分开的,上面pytorch是用一个sequenceif self._projection_dim is None:aggr = self.aggr_layer(mask_input)else:u = self.project_layer(mask_input)aggr = self.aggr_layer(u)# 得到mask结果weights = self.weight_layer(aggr)# elemnet-wide productmasked_net = net * weightsif not self.config.HasField('output_size'):return masked_net# 最终处理,一个Liner+layer norm层hidden = self.output_layer(masked_net)ln_hidden = self.output_layer_norm(hidden)return self.final_relu(ln_hidden)class MaskNet(Layer):def __init__(self, params, name='mask_net', reuse=None, **kwargs):super(MaskNet, self).__init__(name=name, **kwargs)self.reuse = reuseself.params = paramsself.config = params.get_pb_config()if self.config.HasField('mlp'):p = Parameter.make_from_pb(self.config.mlp)p.l2_regularizer = params.l2_regularizerself.mlp = MLP(p, name='mlp', reuse=reuse)else:self.mlp = Noneself.mask_layers = []for i, block_conf in enumerate(self.config.mask_blocks):params = Parameter.make_from_pb(block_conf)params.l2_regularizer = self.params.l2_regularizermask_layer = MaskBlock(params, name='block_%d' % i, reuse=self.reuse)self.mask_layers.append(mask_layer)if self.config.input_layer_norm:if tf.__version__ >= '2.0':self.input_layer_norm = tf.keras.layers.LayerNormalization(name='input_ln')else:self.input_layer_norm = LayerNormalization(name='input_ln')def call(self, inputs, training=None, **kwargs):# 与pytorch版本对比,对输入也进行了一次layer normif self.config.input_layer_norm:inputs = self.input_layer_norm(inputs)# 下面的并行/串行实现逻辑无差if self.config.use_parallel:mask_outputs = [mask_layer((inputs, inputs)) for mask_layer in self.mask_layers]all_mask_outputs = tf.concat(mask_outputs, axis=1)if self.mlp is not None:output = self.mlp(all_mask_outputs, training=training)else:output = all_mask_outputsreturn outputelse:net = inputsfor i, _ in enumerate(self.config.mask_blocks):mask_layer = self.mask_layers[i]net = mask_layer((net, inputs))if self.mlp is not None:output = self.mlp(net, training=training)else:output = netreturn output
Reference:
MaskNet: Introducing Feature-Wise Multiplication to CTR Ranking Models by Instance-Guided Mask
tesorflow实现
twitter-alg-ml
相关文章:
特征交叉-MaskNet文章总结代码实现
MaskNet 这个模型是微博21年提出的,23年twitter(X)开源的推荐系统排序模块使用的backbone结构。 核心思想是认为DNN为主的特征交叉是addictive,交叉效率不高;所以设计了一种multiplicatvie的特征交叉 如何设计muliplicative特征交叉呢&#x…...
【第八课】Rust中的函数与方法
目录 前言 函数指针 函数当作另一个函数的参数 函数当作另一个函数的返回值 闭包 方法 关联函数 总结 前言 在前面几课中,我们都或多或少的接触到了rust中的函数,rust中的函数和其他语言的并没有什么不同,简单的语法不在这篇文章中赘…...
PyQt飞机大战游戏(附下载地址)
欢迎下载体验! 文件大小:22.9 M 下载地址:链接:https://wwrr.lanzoul.com/iybV22frvcng pyqt5-飞机大战 一.前言 up主最近高产,再给大家分享一个博主开发的小游戏-飞机大战,这是一款飞行射击游…...
代替Spinnaker 的 POINTGREY工业级相机 FLIR相机 Python编程案例
SpinnakerSDK_FULL_4.0.0.116_x64 是一个用于FLIR相机的SDK,主要用于图像采集和处理。Spinnaker SDK主要提供C接口,无法直接应用在python环境。本文则基于Pycharm2019python3.7的环境下,调用opencv,EasySpin,PySpin,的库实现POINTGREY工业级相…...
redis模糊匹配key内存分析的脚本
效果: 脚本 与 redis-cli 命令放在同一路径下执行脚本 注意: 1、SCAN 命令仅扫描当前节点的键,若要扫描整个集群中的所有节点,建议在各个从节点上分别执行; 2、为避免扫描对业务产生影响: 可以在从节点或…...
STM32设计学生宿舍监测控制系统-分享
目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 本项目旨在利用STM32单片机为核心,结合传感器技术、无线通信技…...
Python爬虫案例八:抓取597招聘网信息并用xlutils进行excel数据的保存
excel保存数据的三种方式: 1、pandas保存excel数据,后缀名为xlsx; 举例: import pandas as pddic {姓名: [张三, 李四, 王五, 赵六],年龄: [18, 19, 20, 21],住址: [广州, 青岛, 南京, 重庆] } dic_file pd.DataFrame(dic) dic_file…...
Mybatis-Day3
规则: 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下 设置SQL映射我呢见的namespace属性为Mapper接口的全限定名 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类…...
第六节-AppScan扫描报告
第六节-AppScan扫描报告 1.加载扫描结果 1.点击【打开】 2.选择之前保存过的扫描结果 3.等待加载完成 2.领导查看的报告 1.点击【报告】 2.模板选择为【缺省值】 3.最低严重性选择为【中】,测试类型选择为【应用程序】 4.点击【布局】 5.选择【其他徽标】&#x…...
多模MPO的测试套件
MultiFiber™Pro光功率计及光纤测试工具包 首款支持单模和多模MPO光纤认证的MPO光纤测试仪 利用“扫描全部”功能自动扫描和测试MPO连接器中的所有光纤 支持多模和单模MPO光纤干线 在测试光纤干线时无需使用扇形跳线 以最小的界面显示易懂的结果 用户界面上显示所有12光纤 自动…...
使用php和Xunsearch提升音乐网站的歌曲搜索效果
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
Idea忽略提交文件、Idea设置文件隐藏、Idea提交时隐藏部分文件、git提交时忽略文件
文章目录 一、在idea中commit文件时隐藏文件方式一:创建.gitignore文件(推荐)方式二:通过File Types设置隐藏文件方式三:通过Git配置忽略文件(不推荐)总结 二、可能遇到的问题2.1、.gitigno…...
菜鸟驿站二维码/一维码 取件识别功能
特别注意需要引入 库文 ZXing 可跳转: 记录【WinForm】C#学习使用ZXing.Net生成条码过程_c# zxing-CSDN博客 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.…...
MQ核心作用、解耦、削峰使用场景详解
说在前面 在如今的高并发互联网应用中,如何确保系统在巨大的流量冲击下还能稳定运行,是每个技术团队都会遇到的挑战。说到这,消息队列(MQ)就是背后的“大功臣”了。无论是异步处理请求、平滑应对流量高峰,…...
【从零开始的LeetCode-算法】3232. 判断是否可以赢得数字游戏
给你一个 正整数 数组 nums。 Alice 和 Bob 正在玩游戏。在游戏中,Alice 可以从 nums 中选择所有个位数 或 所有两位数,剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和,则 Alice 获胜。 如果 Alice 能赢得这场游…...
使用LLaMA-Factory微调时的问题与解决方案记录
文章目录 如何指定微调使用的显卡如何解决显卡通信导致的报错模型微调的实际epoch和step如何计算如何实现多卡全量微调模型微调后的结果如何查看模型测试后的指标如何理解如何指定微调使用的显卡 启动网页时使用这种执行命令 CUDA_VISIBLE_DEVICES=5,6,7 llamafactory-cli we…...
一文读懂埋阻埋容工艺
PCB 埋阻埋容工艺是一种在 PCB 板内部埋入电阻和电容的工艺。通常情况下, PCB 上电阻和电容都是通过贴片技术直接焊接在板面上的,而埋阻埋容工艺则将电 阻和电容嵌入到 PCB 板的内部层中,这种印制电路板,其自下而上依次包括第一介电 层,隐埋电…...
What is a Tensor?
WTF is a Tensor? What is the difference between tensors and matrixes?...
提升性能测试效率与准确性:深入解析JMeter中的各类定时器
在软件性能测试领域,Apache JMeter是一款广泛使用的开源工具,它允许开发者模拟大量用户对应用程序进行并发访问,从而评估系统的性能和稳定性。在进行性能测试时,合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…...
从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发
从繁琐到优雅:用 PyTorch Lightning 简化深度学习项目开发 在深度学习开发中,尤其是使用 PyTorch 时,我们常常需要编写大量样板代码来管理训练循环、验证流程和模型保存等任务。PyTorch Lightning 作为 PyTorch 的高级封装库,帮助…...
Python学习32天
Self #比较两个人信息,完全相等输出True,否则输出False class Person(): nameNone ageNone def compare_to(self,other): return self.nameother.name and self.ageother.age man1Person() man1.name"tim" man1.age3 man2Person man…...
云原生学习
1、云原生学习 文章目录 1、云原生学习1. 介绍2. Docker容器化 1. 介绍 什么是云原生?原生指使用JAVA等语言编写的项目,云是指将项目部署到云服务器上云平台:公有云、私有云 本地平台是指直接部署在自己计算机,而开发的应用一定要…...
django从入门到精通(六)——auth认证及自定义用户
Django 提供了一个强大的用户认证系统,允许开发者轻松管理用户的注册、登录、权限和组等功能。以下是对 Django 用户认证系统的详细介绍,包括默认的用户认证、自定义用户认证和权限设置。 1. 默认用户认证 1.1 用户模型 Django 默认提供了一个用户模型…...
影响电阻可靠性的因素
一、影响电阻可靠性的因素: 影响电阻可靠性的因素有温度系数、额定功率,最大工作电压、固有噪声和电压系数 (一)温度系数 电阻的温度系数表示当温度改变1摄氏度时,电阻阻值的相对变化,单位为ppm/C.电阻温度…...
大数运算(加减乘除和输入、输出模块)
为什么会有大数呢?因为long long通常为64位范围约为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,最多也就19位,那么超过19位的如何计算呢?这就引申出来大数了。 本博客适合思考过这道题,但是没做出来或…...
HTML5超酷响应式视频背景动画特效(六种风格,附源码)
文章目录 1.设计来源1.1 大气蓬勃动态背景界面效果1.2 星空闪闪动态背景界面效果1.3 眼神深眸动态背景界面效果1.4 星空银河动态背景界面效果1.5 花开花落动态背景界面效果1.6 海底世界动态背景界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开…...
堆优化版本的Prim
prim和dijkstra每轮找最小边的松弛操作其实是同源的,因而受dijkstra堆优化的启发,那么prim也可以采用小根堆进行优化。时间复杂度也由 O ( n 2 ) O(n^2) O(n2)降为 O ( n l o g n ) O(nlogn) O(nlogn)。 测试一下吧:原题链接 #include <i…...
【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D
文章目录 0. 前言1. PnP求解1.1 直接线性变换DLT1.2 P3P1.3 光束平差法BA2. 实现0. 前言 透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标…...
JDK1.8中JVM堆内存等参数配置
在JDK 8中,JVM内存模型主要包括堆内存(Heap Memory)、元空间(Metaspace)以及直接内存(Direct Memory)。以下是一些常用的JVM内存参数配置建议,特别是在JDK 8环境下: 1. …...
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
文章目录 修改哈希表模板参数迭代器HashTable 的默认成员函数HashTable 迭代器相关函数HashTable 的 Insert 函数HashTable 的 Find函数HashTable 的 Erase函数 封装 unordered_set封装 unordered_map测试 unordered_set 和 unordered_map 修改哈希表 我们基于链地址法实现的哈…...
蓝桥杯模拟
【问题描述】 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只…...
16. 【.NET 8 实战--孢子记账--从单体到微服务】--汇率获取定时器
这篇文章我们将一起编写这个系列专栏中第一个和外部系统交互的功能:获取每日汇率。下面我们一起来编写代码吧。 一、需求 根据文章标题可知,在这片文章中我们只进行汇率的获取和写入数据库。 编号需求说明1获取每日汇率1. 从第三方汇率API中获取汇率信…...
移动充储机器人“小奥”的多场景应用(上)
一、高速公路服务区应用 在高速公路服务区,新能源汽车的充电需求得到“小奥”机器人的及时响应。该机器人配备有储能电池和自动驾驶技术,能够迅速定位至指定充电点,为待充电的新能源汽车提供服务。得益于“小奥”的机动性,其服务…...
【Android】Service使用方法:本地服务 / 可通信服务 / 前台服务 / 远程服务(AIDL)
1 本地Service 这是最普通、最常用的后台服务Service。 1.1 使用步骤 步骤1:新建子类继承Service类:需重写父类的onCreate()、onStartCommand()、onDestroy()和onBind()方法步骤2:构建用于启动Service的Intent对象步骤3:调用st…...
Qt文件目录操作
文件目录操作相关类 Qt 为文件和目录操作提供了一些类,利用这些类可以方便地实现一些操作。Qt 提供的与文件和目录操作相关的类包括以下几个: QCoreApplication:用于提取应用程序路径,程序名等文件信息;QFile&#x…...
刷题-1122
1. 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 import sys def generate_snake_matrix(n):matrix [[0]*n for _ in range(n)]curent_num 1…...
【通俗理解】Jensen不等式与变分分布q(z)在积分计算中的应用
【通俗理解】Jensen不等式与变分分布q(z)在积分计算中的应用 关键词提炼 #Jensen不等式 #变分分布 #积分计算 #期望 #凸函数 #优化问题 #下界估计 #机器学习 第一节:Jensen不等式与变分分布的类比与核心概念【尽可能通俗】 Jensen不等式就像是一个“积分计算器”…...
微信小程序2-地图显示和地图标记
一、index修改页面,让页面能够显示地图和一个添加标记的按钮。 index.wxml <scroll-view class"scrollarea" scroll-y type"list"><view class"index_container"><map id"map" style"width: 100%; h…...
webpack配置和打包性能优化
文章目录 webpack基础配置loaderpluginloader 和 plugin 的区别devServer打包性能优化1、按需引入组件2、externals 属性3、给定文件匹配范围4、noParse 属性5、cacheDirectory 缓存属性6、happyPack 多个子进程并行 webpack基础配置 mode:development:设置webpack…...
iframe嵌入踩坑记录
iframe嵌入父子页面token问题 背景介绍 最近在做在平台A中嵌入平台B某个页面的需求,我负责的是平台B这边,使这个页面被嵌入后能正常使用。两个平台都实现了单点登录。 其实这是第二次做这个功能了,原本以为会很顺利,但没想到折腾…...
FreeRTOS——消息队列
目录 一、概念及其作用 1.1概念 1.2特点 1.3工作原理 二、相关API 2.1创建队列 2.2任务中写队列 2.3任务中读队列 2.4中断中写队列 2.5中断中读队列 三、实现原理 3.1消息队列控制块 3.2消息队列的创建 3.3消息的发送 3.3.1任务中发送 3.3.2中断中发送 3.4消息的…...
c++11的动态类型
c17引入了any 和 variant,可以将任意数据类型统一用any或variant类型表示,在开发中还是能够带来很多便利的。在c11版本中,可以用下面这个例子,仿照实现一个Any类型。 #include <iostream> #include <stdexcept> #inc…...
大语言模型---Llama模型文件介绍;文件组成
文章目录 1. 概要2. 文件组成 1. 概要 在使用 LLaMA(Large Language Model Meta AI)权重时,通常会涉及到与模型权重存储和加载相关的文件。这些文件通常是以二进制格式存储的,具有特定的结构来支持高效的模型操作。以下以Llama-7…...
常见网络厂商设备默认用户名/密码大全
常见网络厂商的默认用户名/密码 01 思科 (Cisco) 设备类型:路由器、交换机、防火墙、无线控制器 默认用户名:cisco 默认密码:cisco 设备类型:网管型交换机 默认用户名:admin 默认密码:admin 02 华…...
【大数据分析机器学习】分布式机器学习
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...
Go 语言已立足主流,编程语言排行榜24 年 11 月
Go语言概述 Go语言,简称Golang,是由Google的Robert Griesemer、Rob Pike和Ken Thompson在2007年设计,并于2009年11月正式宣布推出的静态类型、编译型开源编程语言。Go语言以其提高编程效率、软件构建速度和运行时性能的设计目标,…...
数字反向输出
数字反向输出 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 小明听到广播里的数字后,总喜欢反着念给妈妈听。请聪明的你将小明听到的数字反向输出。 输入 输入为一个整型的四位数n 输出 …...
c++ std::stack总结
概念 std::stack 是 C 标准库中的一个容器适配器(Container Adapter)。它通常是基于其他容器(如 std::deque 或 std::vector)实现的,提供了一个后进先出(LIFO,Last In First Out)的…...
【C++习题】10.反转字符串中的单词 lll
题目: 链接🔗:557.反转字符串中的单词 lll 题目: 代码: class Solution { public:void Reverse(string &s, int start, int end){char tmp;while(start < end){tmp s[start];s[start] s[end];s[end] tmp;…...
【pyspark学习从入门到精通14】MLlib_1
目录 包的概览 加载和转换数据 在前文中,我们学习了如何为建模准备数据。在本文中,我们将实际使用这些知识,使用 PySpark 的 MLlib 包构建一个分类模型。 MLlib 代表机器学习库。尽管 MLlib 现在处于维护模式,即它不再积极开发…...