| 169 | |
| 170 | |
| 171 | class MidResTemporalBlock1D(nn.Module): |
| 172 | def __init__( |
| 173 | self, |
| 174 | in_channels: int, |
| 175 | out_channels: int, |
| 176 | embed_dim: int, |
| 177 | num_layers: int = 1, |
| 178 | add_downsample: bool = False, |
| 179 | add_upsample: bool = False, |
| 180 | non_linearity: str | None = None, |
| 181 | ): |
| 182 | super().__init__() |
| 183 | self.in_channels = in_channels |
| 184 | self.out_channels = out_channels |
| 185 | self.add_downsample = add_downsample |
| 186 | |
| 187 | # there will always be at least one resnet |
| 188 | resnets = [ResidualTemporalBlock1D(in_channels, out_channels, embed_dim=embed_dim)] |
| 189 | |
| 190 | for _ in range(num_layers): |
| 191 | resnets.append(ResidualTemporalBlock1D(out_channels, out_channels, embed_dim=embed_dim)) |
| 192 | |
| 193 | self.resnets = nn.ModuleList(resnets) |
| 194 | |
| 195 | if non_linearity is None: |
| 196 | self.nonlinearity = None |
| 197 | else: |
| 198 | self.nonlinearity = get_activation(non_linearity) |
| 199 | |
| 200 | self.upsample = None |
| 201 | if add_upsample: |
| 202 | self.upsample = Upsample1D(out_channels, use_conv=True) |
| 203 | |
| 204 | self.downsample = None |
| 205 | if add_downsample: |
| 206 | self.downsample = Downsample1D(out_channels, use_conv=True) |
| 207 | |
| 208 | if self.upsample and self.downsample: |
| 209 | raise ValueError("Block cannot downsample and upsample") |
| 210 | |
| 211 | def forward(self, hidden_states: torch.Tensor, temb: torch.Tensor) -> torch.Tensor: |
| 212 | hidden_states = self.resnets[0](hidden_states, temb) |
| 213 | for resnet in self.resnets[1:]: |
| 214 | hidden_states = resnet(hidden_states, temb) |
| 215 | |
| 216 | if self.upsample: |
| 217 | hidden_states = self.upsample(hidden_states) |
| 218 | if self.downsample: |
| 219 | hidden_states = self.downsample(hidden_states) |
| 220 | |
| 221 | return hidden_states |
| 222 | |
| 223 | |
| 224 | class OutConv1DBlock(nn.Module): |
no outgoing calls
no test coverage detected
searching dependent graphs…