神经网络中遇到的 python 函数(Pytorch)
1.getattr()
函数用于返回一个对象属性值。
def getattr(object, name, default=None): # known special case of getattr"""getattr(object, name[, default]) -> valueGet a named attribute from an object; getattr(x, 'y') is equivalent to x.y.When a default argument is given, it is returned when the attribute doesn'texist; without it, an exception is raised in that case."""pass
getattr(object, name[, default])
object -- 对象。
name -- 字符串,对象属性。
default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
2.assert
用于判断一个表达式,在表达式条件为 false 的时候触发异常。
语法格式:
`assert expression`
assert
后面也可以紧跟参数:
assert expression [, arguments]
等价于:
if not expression:raise AssertionError(arguments)
3.mkdir()
创建目录。
def mkdir(self, mode=0o777, parents=False, exist_ok=False):"""Create a new directory at this given path."""if self._closed:self._raise_closed()try:self._accessor.mkdir(self, mode)except FileNotFoundError:if not parents or self.parent == self:raiseself.parent.mkdir(parents=True, exist_ok=True)self.mkdir(mode, parents=False, exist_ok=exist_ok)except OSError:# Cannot rely on checking for EEXIST, since the operating system# could give priority to other errors like EACCES or EROFSif not exist_ok or not self.is_dir():raise
mkdir(parents=True, exist_ok=True)
parents:如果父目录不存在,是否创建父目录。
exist_ok:只有在目录不存在时创建目录,目录已存在时不会抛出异常。
4.datetime.datetime.now()
寻找当前时间。
datetime.datetime.now(time_zone)
datetime.datetime.now()
time_zone 可选的 默认情况下,这个参数被设置为None 。我们输入我们希望转换的当前时间的时区。
time = datetime.datetime.now()
print("The time in this instance is:", time)
# The time in this instance is: 2023-07-17 12:55:35.257722
5.strftime()
格式化时间,返回当地时间(显示的格式以字符串显示,主要通过format决定)。
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S,%A,%B')
年月日分时秒的符号如下:
%y 年份两位数
%Y 年份四位数
%m 月份两位数
%d 月份
%H 24小时制
%I 12小时制
%M 分
%S 秒
%a 星期简化
%A 星期完整
%b 月份简化
%B 月份完整
6.create_logger()
创建日志。
class Logger(object):def __init__(self):pass@staticmethoddef create_logger(path="file.log", log_level=logging.DEBUG, encoding='utf-8'):"""创建日志函数:param path: 日志文件路径:param log_level: 日志等级:logging.DEBUG/logging.INFO/ logging.WARNING/logging.ERROR/logging.CRITICAL:param encoding: 文件编码:return: logger"""logger = logging.getLogger(__name__)logger.setLevel(log_level)handler = logging.FileHandler(path, mode='a', encoding=encoding)handler.setLevel(logging.INFO)ch = logging.StreamHandler()ch.setLevel(logging.DEBUG)formatter = logging.Formatter("%(asctime)s:%(filename)s:%(funcName)s:%(lineno)d:%(levelname)s:%(message)s")formatter = logging.Formatter("%(message)s")handler.setFormatter(formatter)ch.setFormatter(formatter)logger.addHandler(handler)logger.addHandler(ch)return logger
7.Logger.info
通过 msg和不定参数args来进行日志的格式化
def info(self, msg, *args, **kwargs):"""Log 'msg % args' with severity 'INFO'.To pass exception information, use the keyword argument exc_info witha true value, e.g.logger.info("Houston, we have a %s", "interesting problem", exc_info=1)"""if self.isEnabledFor(INFO):self._log(INFO, msg, args, **kwargs)
Python中使用logging调用Logger.info方法的处理过程
8. item() 和 items()
item()的作用是取出单元素张量的元素值并返回该值,保持该元素类型不变。
x= torch.randn(3,3)
x[1,1].item()
items()的作用是把字典中的每对key和value组成一个元组,并把这些元祖放在列表中返回。
d = {'a' : 1,'b': 2,'C' : 3}
d.items()
item()和items()的用法详解与区别
9.glob()
可以查找符合自己目的的文件,类似于Windows下的文件搜索,支持通配符操作*,?,[]这三个通配符,*代表0个或多个字符,?代表一个字符,[]匹配指定范围内的字符,如[0-9]匹配数字。
glob方法返回所有匹配的文件路径列表(list);
方法需要一个参数用来指定匹配的路径字符串(字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。
glob.glob(r’c:*.txt’) # 获得C盘下的所有txt文件
glob.glob(r’E:\pic**.jpg’) # 获得指定目录下的所有jpg文件
10.tqdm模块
进度条将处理情况进行可视化展示。
tqdm(iterator)
具体使用参考:详细介绍Python进度条tqdm的使用
11.zip()
将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
zip([iterable, ...]) # iterabl -- 一个或多个迭代器;
12.with
with
语句用于异常处理,封装了 try…except…finally
编码范式,提高了易用性。
with 语句实现原理建立在上下文管理器之上。
上下文管理器是一个实现 __enter__
和 __exit__
方法的类。使用 with
语句确保在嵌套块的末尾调用 __exit__
方法。
13.transpose()
按轴交换数据。
两个参数是要互换的轴
import numpy as np
import torch
# 创建
x = np.arange(12).reshape((2,2,3))
x = torch.Tensor(x)
print(x)
# 输出
tensor([[[ 0., 1., 2.],[ 3., 4., 5.]],[[ 6., 7., 8.],[ 9., 10., 11.]]])
# transpose:转换第一维度和第二维度,即二维矩阵的x和y
a = x.transpose(1,2)
print(a)
#输出
tensor([[[ 0., 3.],[ 1., 4.],[ 2., 5.]],[[ 6., 9.],[ 7., 10.],[ 8., 11.]]])
# transpose:
b = x.transpose(0,2)
print(b)
# 输出
tensor([[[ 0., 6.],[ 3., 9.]],[[ 1., 7.],[ 4., 10.]],[[ 2., 8.],[ 5., 11.]]])
14.nonzero()
nonzero
函数是numpy
中用于得到数组array
中非零元素的位置(数组索引)的函数。
numpy.nonzero(arr)
15.view()
view() 的作用相当于numpy中的reshape,重新定义矩阵的形状。
tensor.view()
a1 = torch.arange(0,16)
print(a1)
#输出
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])a2 = a1.view(8, 2)
a3 = a1.view(2, 8)
a4 = a1.view(4, 4)#输出
tensor([[ 0, 1],[ 2, 3],[ 4, 5],[ 6, 7],[ 8, 9],[10, 11],[12, 13],[14, 15]])
tensor([[ 0, 1, 2, 3, 4, 5, 6, 7],[ 8, 9, 10, 11, 12, 13, 14, 15]])
tensor([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11],[12, 13, 14, 15]])
view中一个参数定为-1,代表自动调整这个维度上的元素个数,以保证元素的总数不变。
a2 = a1.view(-1, 16)
a3 = a1.view(-1, 8)
a4 = a1.view(-1, 4)
a5 = a1.view(-1, 2)
a6 = a1.view(4*4, -1)
a7 = a1.view(1*4, -1)
a8 = a1.view(2*4, -1)#输出
tensor([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]])
tensor([[ 0, 1, 2, 3, 4, 5, 6, 7],[ 8, 9, 10, 11, 12, 13, 14, 15]])
tensor([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11],[12, 13, 14, 15]])
tensor([[ 0, 1],[ 2, 3],[ 4, 5],[ 6, 7],[ 8, 9],[10, 11],[12, 13],[14, 15]])
tensor([[ 0],[ 1],[ 2],[ 3],[ 4],[ 5],[ 6],[ 7],[ 8],[ 9],[10],[11],[12],[13],[14],[15]])
tensor([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11],[12, 13, 14, 15]])
tensor([[ 0, 1],[ 2, 3],[ 4, 5],[ 6, 7],[ 8, 9],[10, 11],[12, 13],[14, 15]])
16.index_select
返回沿着输入张量的指定维度的指定索引号进行索引的张量子集。
torch.index_select(input,dim,index,out=None)
input(Tensor) - 需要进行索引操作的输入张量;
dim(int) - 需要对输入张量进行索引的维度;
index(LongTensor) - 包含索引号的 1D 张量;
out(Tensor, optional) - 指定输出的张量。比如执行 torch.zeros(2, 2, out = tensor_a),相当于执行 tensor_a = torch.zeros(2, 2);
17.nn.ModuleList
是一个存储不同module,并自动将每个module的parameters添加到网络之中的容器。
可以把任意nn.Module
的子类(如nn.Conv2d,nn.Linear等)加到这个list里面,方法和python自带的list一样,无非是extend,append等操作,但不同于一般的list,加入到nn.ModuleLis
t里面的module是会自动注册到整个网络上的,同时module的parameters也会自动添加到整个网络中。若使用python的list,则会出问题。
nn.ModuleList
并没有定义一个网络,它只是将不同的模块储存在一起,这些模块之间并没有什么先后顺序可言。 网络的执行顺序是根据forward
函数来决定的。但是一般设置ModuleList中的顺序和forward中保持一致,增强代码的可读性。
ModuleList
可以根据序号来调用,一个模型可以在forward
函数中被调用多次。但需要注意的是,被调用多次的模块,是使用同一组parameters
的,也就是它们是参数共享的。
18.nn.Sequential
序列容器,用于搭建神经网络的模块被按照被传入构造器的顺序添加到nn.Sequential()
容器中.
nn.Sequential()
可以允许将整个容器视为单个模块(即相当于把多个模块封装成一个模块),forward()
方法接收输入之后,nn.Sequential()
按照内部模块的顺序自动依次计算并输出结果。
不同于nn.ModuleList
,nn.Sequential
已经实现了内部的forward
函数,而且里面的模块必须是按照顺序进行排列的,所以我们必须确保前一个模块的输出大小和下一个模块的输入大小是一致的。
19.nn.ReLU()
class ReLU(Module):r"""Applies the rectified linear unit function element-wise::math:`\text{ReLU}(x) = (x)^+ = \max(0, x)`Args:inplace: can optionally do the operation in-place. Default: ``False``"""__constants__ = ['inplace']inplace: booldef __init__(self, inplace: bool = False):super(ReLU, self).__init__()self.inplace = inplacedef forward(self, input: Tensor) -> Tensor:return F.relu(input, inplace=self.inplace)def extra_repr(self) -> str:inplace_str = 'inplace=True' if self.inplace else ''return inplace_str
inplace = False
:不会修改输入对象的值,而是返回一个新创建的对象,所以打印出对象存储地址不同,类似于C语言的值传递;
inplace = True
:会修改输入对象的值,所以打印出对象存储地址相同,类似于C语言的址传递;会改变输入数据的值,节省反复申请与释放内存的空间与时间,只是将原来的地址传递,效率更好。
20.raise
手动抛出异常。
raise [exceptionName [(reason)]]
#其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。
#如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。
raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。
21.torch.clamp()
clamp()函数的功能: 将输入input张量每个元素的值压缩到区间 [min,max],并返回结果到一个新张量 。
torch.clamp(input, min, max, out=None) → Tensor
input:输入张量;
min:限制范围下限;
max:限制范围上限;
out:输出张量。
a=torch.randint(low=0,high=10,size=(10,1))
print(a)
b=torch.clamp(a,3,9)
print(b)#输出:
tensor([[7],[5],[5],[4],[4],[9],[0],[1],[4],[1]])
tensor([[7],[5],[5],[4],[4],[9],[3],[3],[4],[3]])
clamp_() 与clamp() 的区别:
pytorch 中,一般来说如果对tensor的一个函数后加上了下划线,则表明这是一个in-place类型。
in-place类型是指,当在一个tensor上操作了之后,是直接修改了这个tensor,而不是返回一个新的tensor并不修改旧的tensor。
22. contiguous()
contiguous()函数的作用: 把tensor变成在内存中连续分布的形式。
contiguous一般与 transpose,permute,view搭配使用:使用transpose或permute进行维度变换后,调用contiguous,然后方可使用view对维度进行变形(如:tensor_var.contiguous().view() ),示例如下:
x = torch.Tensor(2,3)
y = x.permute(1,0) # permute:二维tensor的维度变换,此处功能相当于转置transpose
y.view(-1) # 报错,view使用前需调用contiguous()函数
y = x.permute(1,0).contiguous()
y.view(-1) # OK
具体原因有两种说法:
1 transpose、permute等维度变换操作后,tensor在内存中不再是连续存储的,而view操作要求tensor的内存连续存储,所以需要contiguous来返回一个contiguous copy;
2 维度变换后的变量是之前变量的浅拷贝,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的,所以也会报错;即contiguous返回了tensor的深拷贝contiguous copy数据;
pytorch中的contiguous()函数的浅浅解释
23.range()
返回一个 [ e n d − s t a r t s t e p − 1 ] [\frac{end-start}{step}-1] [stepend−start−1] 的一维向量,其值从 start 到 end,步骤为 step。步长是张量中两个值之间的差距。 o u t i + 1 = o u t i + s t e p out_{i+1}=out_i+step outi+1=outi+step
torch.range(start=0, end, step=1, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
# → Tensor
- start(float) -点集的起始值。默认值:0。
- end(float) -点集的结束值。 step(float)
- 每对相邻点之间的间隙。默认值:1。
关键字参数:
out(Tensor,可选的) -输出张量。dtype(torch.dtype, 可选的) -返回张量的所需数据类型。默认值:如果 None ,使用全局默认值(参见 torch.set_default_tensor_type() )。如果未给出 dtype,则从其他输入参数推断数据类型。如果 start 、 end 或 stop 中的任何一个是浮点数,则 dtype 被推断为默认 dtype,请参阅 get_default_dtype() 。否则, dtype 被推断为 torch.int64 。layout(torch.layout, 可选的) -返回张量的所需布局。默认值:torch.strided。device(torch.device, 可选的) -返回张量的所需设备。默认值:如果 None ,使用当前设备作为默认张量类型(参见 torch.set_default_tensor_type() )。 device 将是 CPU 张量类型的 CPU 和 CUDA 张量类型的当前 CUDA 设备。requires_grad(bool,可选的) -如果 autograd 应该在返回的张量上记录操作。默认值:False。
>>> torch.range(1, 4)
tensor([ 1., 2., 3., 4.])
>>> torch.range(1, 4, 0.5)
tensor([ 1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000, 4.0000])
torch.arange 与 torch.range一样:Torch.arange函数详解
24.new_tensor()
返回一个以 data 作为张量数据的新张量。默认情况下,返回的张量与该张量具有相同的torch.dtype 和torch.device。
Tensor.new_tensor(data, dtype=None, device=None, requires_grad=False) → Tensor
参数:
data(array_like) -返回的张量副本 data 。dtype(torch.dtype, 可选的) -返回张量的所需类型。默认值:如果没有,则与此张量相同 torch.dtype。device(torch.device, 可选的) -返回张量的所需设备。默认值:如果没有,则与此张量相同 torch.device。requires_grad(bool,可选的) -如果 autograd 应该在返回的张量上记录操作。默认值:False。
25.meshgrid()
如果输入具有大小为 S 0 , . . . , S N − 1 S_0,...,S_{N-1} S0,...,SN−1 的 N N N 张量,则输出也将具有 N N N 张量,其中每个张量的形状为 ( S 0 , . . . , S N − 1 ) (S_0,...,S_{N-1}) (S0,...,SN−1)。
torch.meshgrid(*tensors, indexing=None)
参数:
tensors(张量列表) -标量或一维张量列表。标量将自动被视为大小为
的张量
indexing-
(str,可选):索引模式,“xy” 或“ij”,默认为“ij”。请参阅警告以了解未来的变化。如果选择“xy”,则第一个维度对应于第二个输入的基数,第二个维度对应于第一个输入的基数。如果选择“ij”,则维度的顺序与输入的基数相同。
>>> x = torch.tensor([1, 2, 3])
>>> y = torch.tensor([4, 5, 6])
>>> grid_x, grid_y = torch.meshgrid(x, y, indexing='ij')
>>> grid_x
tensor([[1, 1, 1],[2, 2, 2],[3, 3, 3]])
>>> grid_y
tensor([[4, 5, 6],[4, 5, 6],[4, 5, 6]])
26.int()
int( )
函数能将str类型、float类型的数据转换成整数类型。
int( )函数的本质是将数据转换为整数。
对于浮点数,int( )函数会做取整处理。取整就是直接抹零,直接输出整数部分。
27.Conv1d()
class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)`
in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度
out_channels(int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
kernel_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels
stride(int or tuple, optional) - 卷积步长
padding (int or tuple, optional)- 输入的每一条边补充0的层数
dilation(int or tuple, `optional``) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
Conv1D 详解
相关文章:
神经网络中遇到的 python 函数(Pytorch)
1.getattr() 函数用于返回一个对象属性值。 def getattr(object, name, defaultNone): # known special case of getattr"""getattr(object, name[, default]) -> valueGet a named attribute from an object; getattr(x, y) is equivalent to x.y.When a …...

分布式事务及解决方案
1、分布式事务 分布式事务就是在一个交易中各个服务之间的相互调用必须要同时成功或者同时失败,保持一致性和可靠性。在单体项目架构中,在多数据源的情况下也会发生 分布式事务问题。本质上来说,分布式事务就是为了保证不同数据库的数据一致性…...
【宏定义】——编译时校验
文章目录 编译时校验功能描述代码实现示例代码正常编译示例编译错误示例预处理之后的结果 代码解析!!estruct {int:-!!(e); }sizeof(struct {int:-!!(e); }) 参考代码 编译时校验 功能描述 用于在编译时检查一个条件是否为真,如果条件为真则会编译失败,…...

C#学习系列之System.Windows.Data Error: 40报错
C#学习系列之System.Windows.Data Error: 40报错 前言报错内容解决总结 前言 在用户界面使用上,代码运行没有问题,但是后台报错,仔细研究了报错内容,解决问题,所以记录一下。 报错内容 System.Windows.Data Error: 4…...

【java安全】RMI
文章目录 【java安全】RMI前言RMI的组成RMI实现Server0x01 编写一个远程接口0x02 实现该远程接口0x03 Registry注册远程对象 Client 小疑问RMI攻击 【java安全】RMI 前言 RMI全称为:Remote Method Invocation 远程方法调用,是java独立的一种机制。 RM…...

rcu链表综合实践
基础知识 rcu-read copy update的缩写。和读写锁起到相同的效果。据说牛逼一点。对于我们普通程序员,要先学会使用,再探究其内部原理。 链表的数据结构: struct list_head {struct list_head *next, *prev; };还有一种:struct h…...
odoo16-python框架-动作
总结 1 模型和视图的 设计之美 view_ids, view_id,view_mode 最终目的都是为了生成views, 也就是视图. 模型是死的,像男人,一成不变 视图像女人,千变万化, 姿态万千 一阴一阳之谓道,设计之美又在这里得到了体现 2 所有的动作都可以通过web界面来配置 可以通过在"设…...

微信小程序——同一控件的点击与长按事件共存的解决方案
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

selenium自动化-获取元素属性信息
在写自动化过程中我们会想验证自己的代码是否正确,比如登录之后,通过用户名或其他信息来证明你登录成功,或者点击链接后,是否会跳转新的页面。通过获取元素属性信息,可以解决我们的疑惑。 一、获取内容对象的内容信息 …...

LabVIEW开发小型减阻试验平台
LabVIEW开发小型减阻试验平台 湍流摩擦在粘性流体的阻力中起着重要作用,减少湍流摩擦是流体力学领域的热门话题之一。在油气管道的长距离流体输送中,泵站提供的几乎所有动力都用于克服流体的胫骨摩擦。在流体输送领域,船舶的蒙皮摩擦阻力占总…...

解决分类任务中数据倾斜问题
大家好,在处理文本分类任务时,基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里,本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习(ML)应用于真实世界的…...

Vue3 word如何转成pdf代码实现
🙂博主:锅盖哒 🙂文章核心:word如何转换pdf 目录 1.前端部分 2.后端部分 在Vue 3中,前端无法直接将Word文档转换为PDF,因为Word文档的解析和PDF的生成通常需要在后端进行。但是,你可以通过Vu…...
fpga--流水灯
fpga流水灯的设计 思路:外部时钟频率50mhz,若要实现每隔0.5s闪烁一次,则使用内部计数器计数到24999999拉高一个周期电平,当电平被拉高的时候,进行LED灯电平的设置,每次检测到高电平,就进行一位…...

51单片机:数码管和矩阵按键
目录 一:动态数码管模块 1:介绍 2:共阴极和共阳极 A:共阴极 B:共阳极 C:转化表 3:74HC138译码器 4:74HC138译码器控制动态数码管 5:数码管显示完整代码 二:矩阵按键模块 1:介绍 2:原理图 3:矩阵按键代码 一:动态数码管模块 1:介绍 LED数码管:数码管是一种…...

Django + Xadmin 数据列表复选框显示为空,怎么修复这个问题?
问题描述: 解决方法: 后续发现的报错: 解决方案: 先根据报错信息定位到源代码: 在该文件顶部写入: from django.core import exceptions然后把: except models.FieldDoesNotExist修改为&…...

《向量数据库指南》——Milvus Cloud2.2.12 易用性,可视化,自动化大幅提升
Milvus Cloud又迎版本升级,三大新特性全力加持,易用性再上新台阶! 近期,Milvus Cloud上线了 2.2.12 版本,此次更新不仅一次性增加了支持 Restful API、召回原始向量、json_contains 函数这三大特性,还优化了 standalone 模式下的 CPU 使用、查询链路等性能,用一句话总…...

Python web实战 | 用 Flask 框架快速构建 Web 应用【实战】
概要 Python web 开发已经有了相当长的历史,从最早的 CGI 脚本到现在的全栈 Web 框架,现在已经成为了一种非常流行的方式。 Python 最早被用于 Web 开发是在 1995 年(90年代早期),当时使用 CGI 脚本编写动态 Web 页面…...

十、数据结构——链式队列
数据结构中的链式队列 目录 一、链式队列的定义 二、链式队列的实现 三、链式队列的基本操作 ①初始化 ②判空 ③入队 ④出队 ⑤获取长度 ⑥打印 四、循环队列的应用 五、总结 六、全部代码 七、结果 在数据结构中,队列(Queue)是一种常见…...

Improving Cross-Modal Retrieval with Set of Diverse Embeddings
框架图: Using Triplet Loss: Smooth-Chamfer similarity Using Log-Sum-Exp,...
物联网阀控水表计量准确度如何?
物联网阀控水表是一种新型的智能水表,它采用了先进的物联网技术,可以通过远程控制和监测水表的运行情况,实现更加精准的水量计量和费用结算。那么,物联网阀控水表的计量准确度如何呢?下面我们将从以下几个方面进行详细…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...