如何修改PyTorch GAN生成器以输出256×64的语音数据?
生成256×64语音数据的条件GAN生成器修改方案
核心结论
- 卷积层不需要是正方形:完全支持处理矩形维度(如256×64),只需调整转置卷积的
kernel_size、stride、padding参数来匹配目标尺寸。 - 优先调整ConvTranspose2d参数:这是最优方案,能保留语音数据的时序/空间关联性;添加线性层会丢失局部结构,不推荐。
具体修改步骤
原MNIST生成器通过多次转置卷积将1×1的噪声映射到64×64图像,现在需要输出256×64,只需在网络末尾增加针对目标维度(比如高度)的上采样层,或调整中间层的转置卷积参数,让其中一个维度的缩放倍数更高。
以下是修改后的生成器代码:
import torch import torch.nn as nn class Generator(nn.Module): def __init__(self, channels_noise, channels_img, features_g, num_classes, x1_size, x2_size, embed_size, device): super(Generator, self).__init__() self.device = device self.net = nn.Sequential( # Input: N x (channels_noise + embed_size) x 1 x 1 self._block(channels_noise + embed_size, features_g * 16, 4, 1, 0), # 输出: 4x4 self._block(features_g * 16, features_g * 8, 4, 2, 1), # 输出: 8x8 self._block(features_g * 8, features_g * 4, 4, 2, 1), # 输出: 16x16 self._block(features_g * 4, features_g * 2, 4, 2, 1), # 输出: 32x32 self._block(features_g * 2, features_g, 4, 2, 1), # 输出: 64x64(宽度已达目标64) # 新增层:仅对高度上采样,宽度保持64 self._block(features_g, features_g // 2, (4, 1), (2, 1), (1, 0)), # 输出: 128x64 # 最终转置卷积得到256x64 nn.ConvTranspose2d( features_g // 2, channels_img, kernel_size=(4, 1), stride=(2, 1), padding=(1, 0) ), nn.Tanh(), ) self.embed = nn.Embedding(num_classes, embed_size) def _block(self, in_channels, out_channels, kernel_size, stride, padding): return nn.Sequential( nn.ConvTranspose2d( in_channels, out_channels, kernel_size, stride, padding, bias=False, ), nn.BatchNorm2d(out_channels), nn.ReLU(), ) def forward(self, x, labels): embedding = self.embed(labels).unsqueeze(2).unsqueeze(3).to(self.device) x = torch.cat([x, embedding], dim=1) return self.net(x).to(self.device)
修改说明
- 前5层转置卷积保持和原模型一致,将输入映射到64×64的特征图(宽度匹配目标的64)。
- 新增的两层转置卷积使用元组形式的参数:
kernel_size=(4,1)、stride=(2,1)、padding=(1,0),仅在高度方向上做2倍上采样,宽度维持64不变,最终输出256×64的结果。 - 修正了原代码中重复赋值
self.x1_size = x1_size的冗余问题,新增device参数统一管理设备。
为什么不推荐线性层
如果用线性层,需要先将卷积层输出的特征图flatten成一维向量,再通过线性层映射到256*64的维度,最后reshape成256×64。这种方式会破坏语音数据的时序连续性(比如相邻时间步的特征关联),导致生成的语音质量下降,因此不建议使用。
内容的提问来源于stack exchange,提问作者Conweezy
相关产品推荐
相关产品推荐

