speechbrain.nnet.autoencoders 模块

自编码器实现。可用于潜在扩散或独立使用

作者
  • Artem Ploujnikov 2022

摘要

Autoencoder

自编码器的标准接口

AutoencoderOutput

AutoencoderOutput(rec, latent, latent_length)

NormalizingAutoencoder

一种经典的(非变分)自编码器,它不使用重新参数化,而是使用普通的归一化技术来约束潜在空间

VariationalAutoencoder

变分自编码器 (VAE) 实现。

VariationalAutoencoderOutput

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])
encode(x, length=None)[source]

将样本从原始空间(例如像素或波形)转换为潜在空间

参数:
  • x (torch.Tensor) – 原始数据表示

  • length (torch.Tensor) – 相对长度的张量

decode(latent)[source]

从潜在表示解码样本

参数:

latent (torch.Tensor) – 潜在表示

forward(x)[source]

执行前向传播

参数:

x (torch.Tensor) – 输入张量

返回:

result – 结果

返回类型:

torch.Tensor

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

潜在表示方差的对数

返回类型:

VariationalAutoencoderOutput

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

潜在空间样本

返回类型:

AutoencoderOutput