speechbrain.nnet.autoencoders 模块
自动编码器实现。可用于潜在扩散或单独使用
- Authors
阿尔乔姆·普洛日尼科夫 2022
摘要
类:
自编码器的标准接口 |
|
一种经典(非变分)自编码器,不使用重参数化,而是使用普通的归一化技术来约束潜在空间 |
|
一个变分自编码器(VAE)的实现。 |
|
参考
- 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])
- 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
- 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