Python概念-Item系列

  所谓Attr系列,其实是__setattr__,__delattr__,__getattr__ 三个函数,从名字中可以看出来这是一套设置,删除,查询的函数,那我们来一个一个的看:

  __setitem__(self,key,value):当对类中的某个属性进行"赋值"时触发的函数(只有使用字典赋值的方式时才会触发此方法的执行)

与Attr系列的区分:__setattr__(self):是在对象打点的方式赋值时,才会触发的方法

代码示例:

class Foo:
    def __setitem__(self, key, value):
        print(key,"获得",value)
f = Foo()
f["name"] = "egon"

  __delitem__(self,key):当类中的某个属性被删除时,触发此方法(只有使用del字典方式删除属性时,才会触发此方法)

与Attr系列的区分:__delattr__(self):使用del类打点属性的方式删除属性,才会触发此方法

代码示例:

1 class Foo:
2     name = "wdb"
3     def __delitem__(self, key):
4         print(key,"已被删除")
5 f = Foo()
6 del f["name"]

  __getitem__(self,item):当调用类中的属性或方法时触发此方法的执行(只在使用类[key]字典的方式调用时,才会触发此方法)

与Attr系列的区分:其实这里已经很明显了,__getattr__(self):是类打点调用且命名空间没有发现名字的情况下,触发此方法

代码示例:

1 class Foo:
2     name = "wdb"
3     def __getitem__(self, item):
4         print(item,"已被调用")
5 f = Foo()
6 f["name"]

转载于:https://www.cnblogs.com/wdbgqq/p/10023034.html

### Flow-item 的技术实现与代码示例 Flow-item 并不是一个标准的技术术语,但在上下文中可以推测它可能指代流模型(Flow-based Models)中的某个组件或模块。以下是关于流模型及其常见实现的详细介绍。 #### 流模型的核心概念 流模型是一种基于可逆变换的概率生成模型,其核心在于通过一系列可逆映射将复杂的分布转换为简单分布[^1]。这些可逆映射可以通过神经网络参数化,并支持高效的正向传播反向传播计算。常见的流模型架构包括 RealNVP Glow 等。 #### 常见的流模型组件 以下是一些常用的流模型组件: 1. **Affine Coupling Layer** Affine Coupling 是一种经典的可逆变换方法,能够将输入数据分为两部分并应用仿射变换。具体而言,给定输入 \( \mathbf{x} \),将其划分为两个子集 \( \mathbf{x}_{1:d} \) \( \mathbf{x}_{d+1:D} \),其中前一部分保持不变,而后一部分经过仿射变换得到输出: \[ y_{1:d} = x_{1:d}, \quad y_{d+1:D} = x_{d+1:D} \odot \exp(s(x_{1:d})) + t(x_{1:d}) \] 这里的 \( s(\cdot) \) \( t(\cdot) \) 是由神经网络定义的尺度平移函数[^1]。 2. **Invertible 1x1 Convolution** Invertible 1x1 卷积层通过对通道维度施加线性变换来增强模型表达能力。该操作本质上是一个矩阵乘法,且要求权重矩阵是可逆的。这使得它可以轻松地应用于图像生成任务中[^1]。 3. **ActNorm (Activation Normalization)** ActNorm 层用于初始化批量标准化过程,从而加速收敛速度。对于每个特征图,ActNorm 学习一个缩放因子偏置项以调整均值方差。 #### 实现代码示例 下面提供了一个简单的 PyTorch 版本的 Affine Coupling Layer 实现: ```python import torch import torch.nn as nn import torch.nn.functional as F class AffineCouplingLayer(nn.Module): def __init__(self, input_dim, hidden_dim): super(AffineCouplingLayer, self).__init__() self.scale_and_shift_net = nn.Sequential( nn.Linear(input_dim // 2, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, input_dim) ) def forward(self, x): x_a, x_b = torch.chunk(x, chunks=2, dim=-1) log_s_and_t = self.scale_and_shift_net(x_a) log_s, t = torch.chunk(log_s_and_t, chunks=2, dim=-1) y_b = x_b * torch.exp(log_s) + t return torch.cat([x_a, y_b], dim=-1), log_s.flatten(1).sum(-1) def inverse(self, y): y_a, y_b = torch.chunk(y, chunks=2, dim=-1) log_s_and_t = self.scale_and_shift_net(y_a) log_s, t = torch.chunk(log_s_and_t, chunks=2, dim=-1) x_b = (y_b - t) * torch.exp(-log_s) return torch.cat([y_a, x_b], dim=-1) ``` 此代码片段展示了如何构建一个基本的耦合层以及其实现细节。注意,在实际部署过程中还需要考虑更多因素,比如数值稳定性优化等。 #### 总结 以上介绍了有关流模型的一些基础知识技术要点,并给出了相应的 Python 编程实例供参考学习之用。如果需要更深入探讨某一方面的内容或者获取其他型的资料,请进一步说明需求!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值