speechbrain.nnet.autoencoders 模块

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

Authors
  • 阿尔乔姆·普洛日尼科夫 2022

摘要

类:

Autoencoder

自编码器的标准接口

AutoencoderOutput

NormalizingAutoencoder

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

VariationalAutoencoder

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

VariationalAutoencoderOutput

参考

class speechbrain.nnet.autoencoders.Autoencoder(*args, **kwargs)[source]

基础:Module

自编码器的标准接口

Example

>>> 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]

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

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

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

decode(latent)[source]

从潜在表示中解码样本

Parameters:

latent (torch.Tensor) – 潜在表示

forward(x)[source]

执行前向传递

Parameters:

x (torch.Tensor) – 输入张量

Returns:

result – 结果

Return type:

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

Parameters:
  • 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) – 如果为真,VariationalAutoencoderOutput的“latent”参数将是潜在空间样本 如果为假,它将是均值

Example

下面的例子展示了一个非常简单的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]

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

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

  • length (torch.Tensor) – 对应输入样本的长度(可选)

Returns:

latent – 潜在表示

Return type:

torch.Tensor

decode(latent)[source]

从潜在表示中解码样本

Parameters:

latent (torch.Tensor) – 潜在表示

Returns:

result – 解码后的样本

Return type:

torch.Tensor

reparameterize(mean, log_var)[source]

应用VAE重参数化技巧来获取用于解码的潜在空间单个潜在空间样本

Parameters:
  • mean (torch.Tensor) – 潜在表示的平均值

  • log_var (torch.Tensor) – 潜在表示方差的对数

Returns:

sample – 一个潜在空间的样本

Return type:

torch.Tensor

train_sample(x, length=None, out_mask_value=None, latent_mask_value=None)[source]

为训练自动编码器提供数据样本

Parameters:
  • x (torch.Tensor) – 源数据(在样本空间中)

  • length (None) – 长度(可选)。如果提供,潜在变量和输出将被屏蔽

  • out_mask_value (float) – 用于输出的掩码值

  • latent_mask_value (float) – 用于潜在张量的掩码值

Returns:

result – 一个包含以下值的命名元组 rec: torch.Tensor

重建结果

latent: torch.Tensor

潜在空间样本

mean: torch.Tensor

潜在表示的均值

log_var: torch.Tensor

潜在表示的方差的对数

Return type:

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

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

Parameters:
  • 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]

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

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

  • length (torch.Tensor) – 输入张量中每个样本的长度。

Returns:

latent – 潜在表示

Return type:

torch.Tensor

decode(latent)[source]

从潜在表示中解码样本

Parameters:

latent (torch.Tensor) – 潜在表示

Returns:

result – 解码后的样本

Return type:

torch.Tensor

train_sample(x, length=None, out_mask_value=None, latent_mask_value=None)[source]

为训练自动编码器提供数据样本

Parameters:
  • x (torch.Tensor) – 源数据(在样本空间中)

  • length (torch.Tensor) – 长度(可选)。如果提供,潜在变量和输出将被掩码

  • out_mask_value (float) – 用于屏蔽输出时的值。

  • latent_mask_value (float) – 用于屏蔽潜在张量的值。

Returns:

结果 – 一个包含以下值的命名元组 rec: torch.Tensor

重建结果

latent: torch.Tensor

潜在空间样本

Return type:

AutoencoderOutput