| 285 | } |
| 286 | |
| 287 | core::TensorValue resblock( |
| 288 | core::ModuleBuildContext & ctx, |
| 289 | const core::TensorValue & input, |
| 290 | const ResBlockWeights & block, |
| 291 | const FlashSrWeights & weights, |
| 292 | int64_t kernel) { |
| 293 | auto output = input; |
| 294 | constexpr int kDilations[3] = {1, 3, 5}; |
| 295 | for (int i = 0; i < 3; ++i) { |
| 296 | auto xt = activation1d(ctx, output, block.activations[i * 2], weights); |
| 297 | xt = conv1d(ctx, xt, block.convs1[i], (kernel * kDilations[i] - kDilations[i]) / 2, kDilations[i]); |
| 298 | xt = activation1d(ctx, xt, block.activations[i * 2 + 1], weights); |
| 299 | xt = conv1d(ctx, xt, block.convs2[i], (kernel - 1) / 2, 1); |
| 300 | output = modules::AddModule().build(ctx, output, xt); |
| 301 | } |
| 302 | return output; |
| 303 | } |
| 304 | |
| 305 | std::vector<float> normalize_output(const std::vector<float> & input) { |
| 306 | float max_abs = 0.0f; |
no test coverage detected