NTM中attr的用法

news/2024/11/9 3:04:45/

代码1

@attrs
class CopyTaskParams(object):name = attrib(default="copy-task")controller_size = attrib(default=100, convert=int)controller_layers = attrib(default=1,convert=int)num_heads = attrib(default=1, convert=int)sequence_width = attrib(default=8, convert=int)sequence_min_len = attrib(default=1,convert=int)sequence_max_len = attrib(default=20, convert=int)memory_n = attrib(default=128, convert=int)memory_m = attrib(default=20, convert=int)num_batches = attrib(default=50000, convert=int)batch_size = attrib(default=1, convert=int)rmsprop_lr = attrib(default=1e-4, convert=float)rmsprop_momentum = attrib(default=0.9, convert=float)rmsprop_alpha = attrib(default=0.95, convert=float)

解析

这段代码是使用Python的attrs库定义一个class,名为CopyTaskParams。这个class的对象包含了一系列的参数,用于控制复制任务模型的行为。下面解释一下每个参数的含义:

  • name: str,复制任务的名称,默认值为"copy-task"。
  • controller_size: int,控制器的大小,默认值为100。
  • controller_layers: int,控制器的层数,默认值为1。
  • num_heads: int,注意力机制中头的数量,默认值为1。
  • sequence_width: int,序列的宽度,默认值为8。
  • sequence_min_len: int,序列的最小长度,默认值为1。
  • sequence_max_len: int,序列的最大长度,默认值为20。
  • memory_n: int,记忆矩阵的行数,默认值为128。
  • memory_m: int,记忆矩阵的列数,默认值为20。
  • num_batches: int,训练时的批次数,默认值为50000。
  • batch_size: int,每个批次的大小,默认值为1。
  • rmsprop_lr: float,RMSProp中的学习率,默认值为1e-4。
  • rmsprop_momentum: float,RMSProp中的动量值,默认值为0.9。
  • rmsprop_alpha: float,RMSProp中的alpha值,默认值为0.95。

这个类是使用 Python 库 attrs 中的装饰器 attrib 定义的,该装饰器使用方法类似于 Python 标准库中的 property 装饰器。attrib 装饰器帮助我们自动生成实例变量,init 方法以及默认参数值等等,并提供验证和转换等功能。
通过使用 attrib 装饰器,我们可以在属性中设置 default 参数,来指定属性的初始值。convert 参数则指定该属性的类型转换方法。例如,convert=int 在将其赋为整数值之前,会尝试将其转换为整数类型。
另外,值得注意的是,在类中未定义 strrepr 方法时,它们将使用 attrs 帮助我们自动生成,以便在实例被打印时很好地显示。
总之,通过使用 attrs,有助于减少模板代码的编写和维护。同时,它还提供了很多其他有用的功能,如比较实例,填写数据缺失值等等。

代码2

import attr@attr.s
class Point:x = attr.ib(default=0)y = attr.ib(default=0)
p1 = Point(x=1, y=2)
p2 = attr.evolve(p1, x=3)
p1 = attr.evolve(p1, x=3)

attr.evolve 是 attrs 库中的一个函数,其作用是创建一个原始对象的副本,并替换其中的一些属性值。它的函数签名如下:

attr.evolve(inst, **changes)

其中 inst 是需要进行修改的原始对象实例,changes 是一个字典,用于指定需要修改的属性和对应的新值。函数返回值是一个新生成的对象实例。
具体来说,changes 的键是需要进行修改的属性名,值是对应的新值。例如,假设有一个 Point 类,它用来表示二维平面上的点坐标。

  • 现在我们创建了一个名为 p1 的 Point 对象实例。
  • 如果我们需要修改这个对象实例中的 x 属性,可以使用 evolve 方法。例如,要把它的 x 属性值从 1 改为 3。
  • 这样,p2 对象实例的 x 属性值就被修改为了 3,而 y 属性的值保持原来不变。
  • 需要注意的是,原始对象实例 p1 的值并没有发生改变,evolve 方法并不会修改原始对象,而是生成一个新的对象实例。如果希望将原始对象实例也进行修改,要对p1操作。

http://www.ppmy.cn/news/77099.html

相关文章

技术大佬们都是怎么学习的?

目录 问题 熟悉更多业务 熟悉端到端 自学 Do exercise Learning trying Teaching 问题 今天逛帖子的时候,看到这么个问题: 这个问题我曾经也很好奇过,那些成为技术大佬的人当初是怎么学习,以及怎么成长过来的&#xff0…

Shellcode分离加载实现免杀的两种方式(VT免杀率:1/68)

简介 本文详细介绍了如何通过文件加载和远程URL加载方式实现Shellcode分离加载,以规避安全软件的检测。文章首先描述了通过Metasploit Framework生成的shellcode文件加载的过程,并提供了相关的C代码。 为了避免被杀毒软件检测,利用动态API调…

论文分享 A ConvNet for the 2020s

摘要 视觉识别的“咆哮的 20 年代”始于 Vision Transformers (ViTs) 的引入,它迅速取代了 ConvNets,成为最先进的图像分类模型。另一方面,vanilla ViT 在应用于对象检测和语义分割等一般计算机视觉任务时面临困难。正是层次化的 Transforme…

从零实现一个数据库(DataBase) Go语言实现版 4.B树实现(Part1))

英文源地址 本章将使用Go语言实现一个不可变地B树.这是一个最小实现, 因此很容易理解. Node节点的格式 我们的B树最终将被持久化到磁盘上, 因此我们首先需要为b树节点设计数据格式.如果没有这种格式, 我们将无法知道节点的大小以及何时拆分节点. 一个节点包含: 一个固定大小…

伦茨科技带你了解蓝牙App开发的流程

随着移动互联网的快速发展,给我们的生活带来了越来越多的便利,蓝牙App的开发也越来越普及。那么,简单来说,蓝牙App软件的开发就是在手机上为蓝牙物理设备提供具有相关功能的App软件终端,让蓝牙设备更方便的为用户提供服…

如何恢复电脑上删除的文件

在我们使用电脑的过程中,难免会出现误删文件的情况。而一旦误删,让人头痛的就是如何恢复电脑上删除的文件。其实,在大多数情况下,我们仍有机会从电脑中恢复已删除的文件,但需要注意的是,任何的操作都要先停…

基于用户认证数据构建评估模型预测认证行为风险系统(附源码)

文件说明 datasets // 数据集(训练集、测试集) feature engineering // 特征工程 models // 评估模型 测试环境 Python3.8 任务描述 项目来自系统认证风险预测https://www.datafountain.cn/competitions/537 项目完整源码下载:https://download.csdn.net/download/liu…

MySQL主从同步(开GTID)

目录 一、搭建简单的主从同步 二、mysql删除主从(若没有配置过可以不用进行这一步) 1、停止slave服务器的主从同步 2、重置master服务 三、开启GTID 1、Master配置 2、Slave配置 一、搭建简单的主从同步 GTID原理:http://t.csdn.cn/g…