Path: blob/main/modules/parallel_wavegan/layers/causal_conv.py
694 views
# -*- coding: utf-8 -*-12# Copyright 2020 Tomoki Hayashi3# MIT License (https://opensource.org/licenses/MIT)45"""Causal convolusion layer modules."""678import torch91011class CausalConv1d(torch.nn.Module):12"""CausalConv1d module with customized initialization."""1314def __init__(self, in_channels, out_channels, kernel_size,15dilation=1, bias=True, pad="ConstantPad1d", pad_params={"value": 0.0}):16"""Initialize CausalConv1d module."""17super(CausalConv1d, self).__init__()18self.pad = getattr(torch.nn, pad)((kernel_size - 1) * dilation, **pad_params)19self.conv = torch.nn.Conv1d(in_channels, out_channels, kernel_size,20dilation=dilation, bias=bias)2122def forward(self, x):23"""Calculate forward propagation.2425Args:26x (Tensor): Input tensor (B, in_channels, T).2728Returns:29Tensor: Output tensor (B, out_channels, T).3031"""32return self.conv(self.pad(x))[:, :, :x.size(2)]333435class CausalConvTranspose1d(torch.nn.Module):36"""CausalConvTranspose1d module with customized initialization."""3738def __init__(self, in_channels, out_channels, kernel_size, stride, bias=True):39"""Initialize CausalConvTranspose1d module."""40super(CausalConvTranspose1d, self).__init__()41self.deconv = torch.nn.ConvTranspose1d(42in_channels, out_channels, kernel_size, stride, bias=bias)43self.stride = stride4445def forward(self, x):46"""Calculate forward propagation.4748Args:49x (Tensor): Input tensor (B, in_channels, T_in).5051Returns:52Tensor: Output tensor (B, out_channels, T_out).5354"""55return self.deconv(x)[:, :, :-self.stride]565758