speechbrain.nnet.autoencoders 模块
自编码器实现。可用于潜在扩散或独立使用
- 作者
Artem Ploujnikov 2022
摘要
类
自编码器的标准接口 |
|
AutoencoderOutput(rec, latent, latent_length) |
|
一种经典的(非变分)自编码器,它不使用重新参数化,而是使用普通的归一化技术来约束潜在空间 |
|
变分自编码器 (VAE) 实现。 |
|
VariationalAutoencoderOutput(rec, latent, mean, log_var, latent_sample, latent_length) |
参考
- class speechbrain.nnet.autoencoders.Autoencoder(*args, **kwargs)[source]
基类:
Module
自编码器的标准接口
示例
>>> import torch >>> from torch import nn >>> from speechbrain.nnet.linear import Linear >>> class SimpleAutoencoder(Autoencoder): ... def __init__(self): ... super().__init__() ... self.enc = Linear(n_neurons=16, input_size=128) ... self.dec = Linear(n_neurons=128, input_size=16) ... def encode(self, x, length=None): ... return self.enc(x) ... def decode(self, x, length=None): ... return self.dec(x) >>> autoencoder = SimpleAutoencoder() >>> x = torch.randn(4, 10, 128) >>> x_enc = autoencoder.encode(x) >>> x_enc.shape torch.Size([4, 10, 16]) >>> x_enc_fw = autoencoder(x) >>> x_enc_fw.shape torch.Size([4, 10, 16]) >>> x_rec = autoencoder.decode(x_enc) >>> x_rec.shape torch.Size([4, 10, 128])
- class speechbrain.nnet.autoencoders.VariationalAutoencoder(encoder, decoder, mean, log_var, len_dim=1, latent_padding=None, mask_latent=True, mask_out=True, out_mask_value=0.0, latent_mask_value=0.0, latent_stochastic=True)[source]
基类:
Autoencoder
变分自编码器 (VAE) 实现。
论文参考:https://arxiv.org/abs/1312.6114
- 参数:
encoder (torch.Module) – 编码器网络
decoder (torch.Module) – 解码器网络
mean (torch.Module) – 计算均值的模块
log_var (torch.Module) – 计算对数方差的模块
len_dim (None) – 长度维度
latent_padding (function) – 在填充潜在变量时使用的函数
mask_latent (bool) – 在哪里将长度掩码应用于潜在表示
mask_out (bool) – 是否将长度掩码应用于输出
out_mask_value (float) – 用于输出的掩码值
latent_mask_value (float) – 用于潜在表示的掩码值
latent_stochastic (bool) – 如果为 true,VariationalAutoencoderOutput 的 “latent” 参数将是潜在空间样本;如果为 false,它将是均值
示例
下面的示例展示了一个非常简单的 VAE 实现,不适用于实际实验
>>> import torch >>> from torch import nn >>> from speechbrain.nnet.linear import Linear >>> vae_enc = Linear(n_neurons=16, input_size=128) >>> vae_dec = Linear(n_neurons=128, input_size=16) >>> vae_mean = Linear(n_neurons=16, input_size=16) >>> vae_log_var = Linear(n_neurons=16, input_size=16) >>> vae = VariationalAutoencoder( ... encoder=vae_enc, ... decoder=vae_dec, ... mean=vae_mean, ... log_var=vae_log_var, ... ) >>> x = torch.randn(4, 10, 128)
train_sample
编码单个批次然后重建它>>> vae_out = vae.train_sample(x) >>> vae_out.rec.shape torch.Size([4, 10, 128]) >>> vae_out.latent.shape torch.Size([4, 10, 16]) >>> vae_out.mean.shape torch.Size([4, 10, 16]) >>> vae_out.log_var.shape torch.Size([4, 10, 16]) >>> vae_out.latent_sample.shape torch.Size([4, 10, 16])
.encode() 将返回与提供的样本对应的均值
>>> x_enc = vae.encode(x) >>> x_enc.shape torch.Size([4, 10, 16])
.reparameterize() 执行重新参数化技巧
>>> x_enc = vae.encoder(x) >>> mean = vae.mean(x_enc) >>> log_var = vae.log_var(x_enc) >>> x_repar = vae.reparameterize(mean, log_var) >>> x_repar.shape torch.Size([4, 10, 16])
- encode(x, length=None)[source]
将样本从原始空间(例如像素或波形)转换为潜在空间
- 参数:
x (torch.Tensor) – 原始数据表示
length (torch.Tensor) – 对应输入样本的长度(可选)
- 返回:
latent – 潜在表示
- 返回类型:
torch.Tensor
- decode(latent)[source]
从潜在表示解码样本
- 参数:
latent (torch.Tensor) – 潜在表示
- 返回:
result – 解码后的样本
- 返回类型:
torch.Tensor
- reparameterize(mean, log_var)[source]
应用 VAE 重新参数化技巧以获取用于解码的单个潜在空间样本
- 参数:
mean (torch.Tensor) – 潜在表示的均值
log_var (torch.Tensor) – 潜在表示方差的对数
- 返回:
sample – 潜在空间样本
- 返回类型:
torch.Tensor
- train_sample(x, length=None, out_mask_value=None, latent_mask_value=None)[source]
提供用于训练自编码器的数据样本
- 参数:
x (torch.Tensor) – 源数据(在样本空间中)
length (None) – 长度(可选)。如果提供,潜在变量和输出将被掩码
out_mask_value (float) – 用于输出的掩码值
latent_mask_value (float) – 用于潜在张量的掩码值
- 返回:
result – 包含以下值的命名元组 rec: torch.Tensor
重建
- latent: torch.Tensor
潜在空间样本
- mean: torch.Tensor
潜在表示的均值
- log_var: torch.Tensor
潜在表示方差的对数
- 返回类型:
- class speechbrain.nnet.autoencoders.VariationalAutoencoderOutput(rec, latent, mean, log_var, latent_sample, latent_length)
基类:
tuple
- latent
字段 1 的别名
- latent_length
字段 5 的别名
- latent_sample
字段 4 的别名
- log_var
字段 3 的别名
- mean
字段 2 的别名
- rec
字段 0 的别名
- class speechbrain.nnet.autoencoders.AutoencoderOutput(rec, latent, latent_length)
基类:
tuple
- latent
字段 1 的别名
- latent_length
字段 2 的别名
- rec
字段 0 的别名
- class speechbrain.nnet.autoencoders.NormalizingAutoencoder(encoder, decoder, latent_padding=None, norm=None, len_dim=1, mask_out=True, mask_latent=True, out_mask_value=0.0, latent_mask_value=0.0)[source]
基类:
Autoencoder
一种经典的(非变分)自编码器,它不使用重新参数化,而是使用普通的归一化技术来约束潜在空间
- 参数:
encoder (torch.nn.Module) – 要使用的编码器
decoder (torch.nn.Module) – 要使用的解码器
latent_padding (function) – 在填充潜在张量时使用的函数
norm (torch.nn.Module) – 归一化模块
len_dim (int) – 时间维度,长度应用于此维度。
mask_out (bool) – 是否将长度掩码应用于输出
mask_latent (bool) – 在哪里将长度掩码应用于潜在表示
out_mask_value (float) – 用于输出的掩码值
latent_mask_value (float) – 用于潜在张量的掩码值
示例
>>> import torch >>> from torch import nn >>> from speechbrain.nnet.linear import Linear >>> ae_enc = Linear(n_neurons=16, input_size=128) >>> ae_dec = Linear(n_neurons=128, input_size=16) >>> ae = NormalizingAutoencoder( ... encoder=ae_enc, ... decoder=ae_dec, ... ) >>> x = torch.randn(4, 10, 128) >>> x_enc = ae.encode(x) >>> x_enc.shape torch.Size([4, 10, 16]) >>> x_dec = ae.decode(x_enc) >>> x_dec.shape torch.Size([4, 10, 128])
- encode(x, length=None)[source]
将样本从原始空间(例如像素或波形)转换为潜在空间
- 参数:
x (torch.Tensor) – 原始数据表示
length (torch.Tensor) – 输入张量中每个样本的长度。
- 返回:
latent – 潜在表示
- 返回类型:
torch.Tensor
- decode(latent)[source]
从潜在表示解码样本
- 参数:
latent (torch.Tensor) – 潜在表示
- 返回:
result – 解码后的样本
- 返回类型:
torch.Tensor
- train_sample(x, length=None, out_mask_value=None, latent_mask_value=None)[source]
提供用于训练自编码器的数据样本
- 参数:
x (torch.Tensor) – 源数据(在样本空间中)
length (torch.Tensor) – 长度(可选)。如果提供,潜在变量和输出将被掩码
out_mask_value (float) – 掩码输出时使用的值。
latent_mask_value (float) – 掩码潜在张量时使用的值。
- 返回:
result – 包含以下值的命名元组 rec: torch.Tensor
重建
- latent: torch.Tensor
潜在空间样本
- 返回类型: