returnn 1.20250228.104237__tar.gz → 1.20250304.101951__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of returnn might be problematic. Click here for more details.
- {returnn-1.20250228.104237/returnn.egg-info → returnn-1.20250304.101951}/PKG-INFO +1 -1
- returnn-1.20250304.101951/_setup_info_generated.py +2 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_backend.py +2 -2
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/conv.py +175 -21
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/_dim_extra.py +2 -2
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/_backend.py +2 -2
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/layers/basic.py +124 -37
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/util/basic.py +3 -2
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/frontend/_backend.py +16 -11
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/basic.py +1 -1
- {returnn-1.20250228.104237 → returnn-1.20250304.101951/returnn.egg-info}/PKG-INFO +1 -1
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/rf_utils.py +4 -1
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_conv.py +91 -27
- returnn-1.20250228.104237/_setup_info_generated.py +0 -2
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/.editorconfig +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/.gitignore +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/.gitmodules +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/.kateconfig +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/CHANGELOG.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/CODEOWNERS +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/CONTRIBUTING.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/LICENSE +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/MANIFEST.in +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/README.rst +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/12AX.cluster_map +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/_setup_returnn_env.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-fwd.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-horovod-mpi.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-horovod-mpi.py.sh +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-horovod-mpi.sh +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-hyper-param-tuning.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-iter-dataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-list-devices.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-lua-torch-layer.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-pretrain.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-record-and-push-to-webserver.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-returnn-as-framework.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-rf-pt-benchmark.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-rf.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-rhn-enwik8.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-sprint-interface.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-att-copy.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-attention.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-enc-dec.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-hard-att-copy.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-lstm-benchmark.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-native-lstm.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-native-lstm2.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-neural-transducer.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-rec-explicit-lstm.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-rec-explicit-rnn.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-rec-self-att.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-search-compiled-graph.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-timit-lstm-ctc.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-torch.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/demo.sh +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/README.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/chars.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/config_demo +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/config_fwd +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/config_real +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/decode.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/go.sh +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/lines.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/split/eval.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/split/train.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/IAM/split/valid.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial/create_test_h5.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial/forwardconfig +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial/go.sh +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial/trainconfig +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial_rgb/go.sh +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/pyproject.toml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/requirements.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/__main__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/__old_mod_loader__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/__setup__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/config.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/audio.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/basic.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/bundle_file.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/cached.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/cached2.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/distrib_files.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/generating.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/hdf.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/lm.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/map.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/meta.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/multi_proc.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/normalization_data.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/numpy_dump.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/postprocessing.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/raw_wav.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/sprint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/stereo.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/text_dict.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/util/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/util/feature_extraction.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/util/strings.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/datasets/util/vocabulary.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/engine/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/engine/base.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/engine/batch.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/__main__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/.git +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/edit.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/reroute.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/select.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/subgraph.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/transform.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/extern/graph_editor/util.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/forward_iface.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_cache.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/backend.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/backend.hpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/module.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/module.hpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/py_utils.hpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/tensor_ops.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_native/tensor_ops.hpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_numpy_backend.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_random_journal.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/_utils.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/array_.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/attention.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/audio/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/audio/mel.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/audio/specaugment.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/backend.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/build_from_dict.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/cond.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/const.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/container.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/control_flow_ctx.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/conversions/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/conversions/hf_llama.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/conversions/torch_nn.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/decoder/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/decoder/transformer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/device.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/dims.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/dropout.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/dtype.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/encoder/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/encoder/base.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/encoder/conformer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/encoder/conformer_v2.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/encoder/e_branchformer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/encoder/transformer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/gradient.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/graph.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/hooks.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/init.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/label_smoothing.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/linear.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/loop.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/loss.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/math_.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/matmul.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/module.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/nested.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/normalization.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/parameter.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/parametrizations.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/parametrize.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/piecewise_linear.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/rand.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/rec.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/reduce.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/run_ctx.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/signal.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/state.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/stepwise_scheduler.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/tensor_array.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/frontend/types.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/import_/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/import_/common.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/import_/git.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/import_/import_.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/learning_rate_control.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/log.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/native_op.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/native_op.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/pretrain.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/sprint/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/sprint/cache.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/sprint/control.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/sprint/error_signals.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/sprint/extern_interface.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/sprint/interface.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/_tensor_extra.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/_tensor_mixin_base.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/_tensor_op_overloads.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/control_flow_ctx.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/dim.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/marked_dim.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/tensor.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/tensor_dict.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tensor/utils.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/compat.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/data_pipeline.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/distributed.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/engine.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/_utils.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/cond.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/dims.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/layer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/loop.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/make_layer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/masked_computation.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_low_level/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_low_level/_backend.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/horovod.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/hyper_param_tuning.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/layers/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/layers/base.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/layers/rec.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/layers/segmental_model.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/layers/signal_processing.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/layers/variable.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/native_op.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/network.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/sprint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/updater.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/util/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/util/data.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/util/gradient_checkpoint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/util/ken_lm.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/util/open_fst.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/data/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/data/extern_data.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/data/pipeline.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/data/queued_data_iter.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/data/tensor_utils.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/distributed.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/engine.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/frontend/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/frontend/_rand.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/frontend/bridge.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/frontend/raw_ops.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/optim/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/optim/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/optim/lion.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/updater.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/array_.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/debug_inf_nan.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/diagnose_gpu.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/exception_helper.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/gradient_checkpoint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/module.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/torch/util/scaled_gradient.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/__init__.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/better_exchook.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/bpe.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/debug.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/debug_helpers.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/file_cache.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/fsa.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/literal_py_to_pickle.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/lru_cache.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/math.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/native_code_compiler.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/pprint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/py-to-pickle.cpp +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/py_ext_mod_compiler.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/result_with_reason.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/sig_proc.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/task_system.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/train_proc_manager.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/util/watch_memory.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn.egg-info/SOURCES.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn.egg-info/dependency_links.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn.egg-info/requires.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn.egg-info/top_level.txt +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/rnn.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/setup.cfg +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/setup.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/DummySprintExec.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm-inspection-profile.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/.gitignore +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/.name +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/misc.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/modules.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/returnn.iml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/_set_num_threads1.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/_setup_returnn_env.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/_setup_test_env.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/bpe-unicode-demo.codes +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/bpe-unicode-demo.vocab +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/lexicon_opt.fst +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/lexicon_opt.isyms +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/lexicon_opt.jpg +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/lexicon_opt.osyms +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/lint_common.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/pycharm-inspect.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/pylint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/returnn-as-framework.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/spelling.dic +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_Config.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_Dataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_Fsa.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_GeneratingDataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_HDFDataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_LearningRateControl.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_Log.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_MultiProcDataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_Pretrain.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_ResNet.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_SprintDataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_SprintInterface.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TFEngine.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TFNativeOp.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TFNetworkLayer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TFNetworkRecLayer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TFNetworkSigProcLayer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TFUpdater.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TFUtil.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TF_determinism.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TaskSystem.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TaskSystem_SharedMem.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_TranslationDataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_Util.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_demos.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_fork_exec.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_hdf_dump.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_array.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_attention.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_base.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_cond.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_const.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_container.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_decoder_transformer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_encoder_conformer.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_gradient.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_label_smoothing.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_loop.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_math.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_normalization.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_piecewise_linear.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_rec.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_reduce.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_rf_signal.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_tensor.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_threading.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_tools.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_torch_dataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_torch_engine.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_torch_frontend.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_torch_internal_frontend.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/test_torch_util.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tests/torch_utils.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/_setup_returnn_env.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/analyze-dataset-batches.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/bliss-collect-seq-lens.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/bliss-dump-text.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/bliss-get-segment-names.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/bliss-to-ogg-zip.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/bpe-create-lexicon.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/calculate-word-error-rate.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/cleanup-old-models.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/collect-orth-symbols.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/collect-words.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/compile_native_op.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/compile_tf_graph.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/debug-dump-search-scores.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/debug-plot-search-scores.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/dump-dataset-raw-strings.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/dump-dataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/dump-forward-stats.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/dump-forward.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/dump-network-json.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/dump-pickle.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/extract_state_tying_from_dataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/get-attention-weights.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/get-best-model-epoch.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/hdf_dump.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/hdf_dump_translation_dataset.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/import-blocks-mt-model.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/import-t2t-mt-model.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/.gitignore +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/Makefile +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/example/README.md +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/example/libs_list +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/example/state_vars_list +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/example/tensor_names_list +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/file.h +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/main.cc +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/rescorer.h +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/vocabulary.cc +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/lattice_rescorer/vocabulary.h +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/tf_avg_checkpoints.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/tf_inspect_checkpoint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/tf_inspect_summary_log.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/torch_avg_checkpoints.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/torch_export_to_onnx.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/torch_inspect_checkpoint.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
- {returnn-1.20250228.104237 → returnn-1.20250304.101951}/tools/torch_scale_tuning.py +0 -0
|
@@ -1223,7 +1223,7 @@ class Backend(Generic[T]):
|
|
|
1223
1223
|
out_spatial_dims: Optional[Sequence[Dim]] = None,
|
|
1224
1224
|
filter: Tensor,
|
|
1225
1225
|
filter_size: Sequence[Dim], # to have the order well-defined
|
|
1226
|
-
padding: str,
|
|
1226
|
+
padding: Union[str, int, Sequence[int]],
|
|
1227
1227
|
strides: Optional[Union[int, Sequence[int]]] = None,
|
|
1228
1228
|
dilation_rate: Optional[Union[int, Sequence[int]]] = None,
|
|
1229
1229
|
groups: Optional[int] = None,
|
|
@@ -1258,7 +1258,7 @@ class Backend(Generic[T]):
|
|
|
1258
1258
|
*,
|
|
1259
1259
|
mode: str,
|
|
1260
1260
|
pool_size: Sequence[int],
|
|
1261
|
-
padding: str = "valid",
|
|
1261
|
+
padding: Union[str, int, Sequence[int]] = "valid",
|
|
1262
1262
|
dilation_rate: Union[Sequence[int], int] = 1,
|
|
1263
1263
|
strides: Sequence[int],
|
|
1264
1264
|
in_spatial_dims: Sequence[Dim],
|
|
@@ -181,15 +181,46 @@ def conv(
|
|
|
181
181
|
in_spatial_dims: Sequence[Dim],
|
|
182
182
|
out_spatial_dims: Optional[Sequence[Dim]] = None,
|
|
183
183
|
filter: Tensor,
|
|
184
|
-
filter_size: Sequence[Dim],
|
|
185
|
-
padding: str,
|
|
184
|
+
filter_size: Sequence[Dim],
|
|
185
|
+
padding: Union[str, int, Sequence[int]],
|
|
186
186
|
strides: Optional[Union[int, Sequence[int]]] = None,
|
|
187
187
|
dilation_rate: Optional[Union[int, Sequence[int]]] = None,
|
|
188
188
|
groups: Optional[int] = None,
|
|
189
189
|
bias: Optional[Tensor] = None,
|
|
190
190
|
use_mask: Optional[bool] = None,
|
|
191
191
|
) -> Tuple[Tensor, Sequence[Dim]]:
|
|
192
|
-
"""
|
|
192
|
+
"""
|
|
193
|
+
Generic N-D convolution.
|
|
194
|
+
|
|
195
|
+
:param source:
|
|
196
|
+
:param in_dim: input channels
|
|
197
|
+
:param out_dim: output channels
|
|
198
|
+
:param in_spatial_dims: On what dimensions to operate on.
|
|
199
|
+
The number of specified dims (1, 2 or 3) specifies whether this is 1D, 2D or 3D convolution.
|
|
200
|
+
The order is consistent with the order of the ``filter_size``, ``strides``, etc.
|
|
201
|
+
:param out_spatial_dims:
|
|
202
|
+
:param filter:
|
|
203
|
+
:param filter_size: defines the order of dims in ``filter``
|
|
204
|
+
such that it matches the order of ``in_spatial_dims``.
|
|
205
|
+
:param padding: "valid" or "same" or int. "valid" is like padding=0.
|
|
206
|
+
padding="same" will pad such that the output has the same spatial dimensions as the input
|
|
207
|
+
(in case of stride=1), or otherwise ceildiv(input, stride).
|
|
208
|
+
The specific padding in padding="same" with stride>1 has changed with behavior version >=24
|
|
209
|
+
(or global config option ``rf_use_consistent_same_padding``)
|
|
210
|
+
and is now consistent independent of dimension size.
|
|
211
|
+
See :func:`_consistent_same_padding` for more details.
|
|
212
|
+
:param strides: the default (if it is None) is 1
|
|
213
|
+
:param dilation_rate:
|
|
214
|
+
:param groups:
|
|
215
|
+
:param bias:
|
|
216
|
+
:param use_mask: Whether to mask the input tensor based on seq lengths
|
|
217
|
+
such that the padding in the padded tensor is ignored
|
|
218
|
+
(it will mask with 0).
|
|
219
|
+
With behavior version >=23, this is enabled by default,
|
|
220
|
+
or configured with global config option ``rf_use_mask``.
|
|
221
|
+
(Also see :func:`use_mask_default`).
|
|
222
|
+
:return: out, out_spatial_dims
|
|
223
|
+
"""
|
|
193
224
|
if any(in_spatial_dim.need_masking() for in_spatial_dim in in_spatial_dims):
|
|
194
225
|
if use_mask is None:
|
|
195
226
|
use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
|
|
@@ -198,6 +229,10 @@ def conv(
|
|
|
198
229
|
for in_spatial_dim in in_spatial_dims:
|
|
199
230
|
if in_spatial_dim not in source.dims:
|
|
200
231
|
raise ValueError(f"conv: source {source} does not have spatial dim {in_spatial_dim}")
|
|
232
|
+
if padding == "same" and _any_is_non_default(strides, default=1) and _should_use_consistent_same_padding():
|
|
233
|
+
source, in_spatial_dims, padding = _consistent_same_padding(
|
|
234
|
+
source, in_spatial_dims=in_spatial_dims, filter_size=filter_size, dilation_rate=dilation_rate, pad_value=0
|
|
235
|
+
)
|
|
201
236
|
# noinspection PyProtectedMember
|
|
202
237
|
out, out_spatial_dims = source._raw_backend.conv(
|
|
203
238
|
source,
|
|
@@ -359,6 +394,9 @@ def transposed_conv(
|
|
|
359
394
|
use_mask = rf.use_mask_default(default=True, default_false_for_behavior_version_up_to=22)
|
|
360
395
|
if use_mask:
|
|
361
396
|
source = source.copy_masked(0, dims=in_spatial_dims)
|
|
397
|
+
if padding == "same" and _any_is_non_default(strides, default=1) and _should_use_consistent_same_padding():
|
|
398
|
+
# I don't really know what this should mean here... Investigate this further...
|
|
399
|
+
raise NotImplementedError("consistent same padding not implemented for transposed conv")
|
|
362
400
|
# noinspection PyProtectedMember
|
|
363
401
|
out, out_spatial_dims = source._raw_backend.transposed_conv(
|
|
364
402
|
source=source,
|
|
@@ -409,7 +447,7 @@ def pool(
|
|
|
409
447
|
nd: Optional[int] = None,
|
|
410
448
|
mode: str,
|
|
411
449
|
pool_size: Union[Sequence[int], int],
|
|
412
|
-
padding: str = "valid",
|
|
450
|
+
padding: Union[str, int, Sequence[int]] = "valid",
|
|
413
451
|
dilation_rate: Union[Sequence[int], int] = 1,
|
|
414
452
|
strides: Optional[Union[Sequence[int], int]] = None,
|
|
415
453
|
in_spatial_dims: Union[Sequence[Dim], Dim],
|
|
@@ -417,19 +455,29 @@ def pool(
|
|
|
417
455
|
use_mask: Optional[bool] = None,
|
|
418
456
|
) -> Tuple[Tensor, Sequence[Dim]]:
|
|
419
457
|
"""
|
|
420
|
-
|
|
421
|
-
This would usually be done after a convolution for down-sampling.
|
|
458
|
+
Generic N-D pooling.
|
|
422
459
|
|
|
423
460
|
:param source:
|
|
424
461
|
:param nd:
|
|
425
462
|
:param mode: "max" or "avg"
|
|
426
463
|
:param pool_size: shape of the window of each reduce
|
|
427
|
-
:param padding: "valid" or "same"
|
|
464
|
+
:param padding: "valid" or "same" or int. "valid" is like padding=0.
|
|
465
|
+
padding="same" will pad such that the output has the same spatial dimensions as the input
|
|
466
|
+
(in case of stride=1), or otherwise ceildiv(input, stride).
|
|
467
|
+
The specific padding in padding="same" with stride>1 has changed with behavior version >=24
|
|
468
|
+
(or global config option ``rf_use_consistent_same_padding``)
|
|
469
|
+
and is now consistent independent of dimension size.
|
|
470
|
+
See :func:`_consistent_same_padding` for more details.
|
|
428
471
|
:param dilation_rate:
|
|
429
|
-
:param strides:
|
|
472
|
+
:param strides: the default (if it is None) will be set to pool_size (in contrast to :func:`conv`)
|
|
430
473
|
:param in_spatial_dims:
|
|
431
474
|
:param out_spatial_dims:
|
|
432
|
-
:param use_mask:
|
|
475
|
+
:param use_mask: Whether to mask the input tensor based on seq lengths
|
|
476
|
+
such that the padding in the padded tensor is ignored
|
|
477
|
+
(for max-pooling, it will mask with -inf, for avg-pooling with 0).
|
|
478
|
+
With behavior version >=23, this is enabled by default,
|
|
479
|
+
or configured with global config option ``rf_use_mask``.
|
|
480
|
+
(Also see :func:`use_mask_default`).
|
|
433
481
|
:return: out, out_spatial_dims
|
|
434
482
|
"""
|
|
435
483
|
if isinstance(in_spatial_dims, Dim):
|
|
@@ -451,8 +499,7 @@ def pool(
|
|
|
451
499
|
strides = pool_size
|
|
452
500
|
elif isinstance(strides, int):
|
|
453
501
|
strides = [strides] * nd
|
|
454
|
-
assert isinstance(strides, (list, tuple))
|
|
455
|
-
assert len(strides) == nd
|
|
502
|
+
assert isinstance(strides, (list, tuple)) and len(strides) == nd and all(isinstance(s, int) for s in strides)
|
|
456
503
|
|
|
457
504
|
if any(in_spatial_dim.need_masking() for in_spatial_dim in in_spatial_dims):
|
|
458
505
|
if use_mask is None:
|
|
@@ -462,6 +509,15 @@ def pool(
|
|
|
462
509
|
else:
|
|
463
510
|
use_mask = False
|
|
464
511
|
|
|
512
|
+
if padding == "same" and _any_is_non_default(strides, default=1) and _should_use_consistent_same_padding():
|
|
513
|
+
source, in_spatial_dims, padding = _consistent_same_padding(
|
|
514
|
+
source,
|
|
515
|
+
in_spatial_dims=in_spatial_dims,
|
|
516
|
+
filter_size=pool_size,
|
|
517
|
+
dilation_rate=dilation_rate,
|
|
518
|
+
pad_value={"max": float("-inf"), "avg": 0}[mode],
|
|
519
|
+
)
|
|
520
|
+
|
|
465
521
|
# noinspection PyProtectedMember
|
|
466
522
|
out, out_spatial_dims = source._raw_backend.pool(
|
|
467
523
|
source=source,
|
|
@@ -642,7 +698,7 @@ def make_conv_out_spatial_dims(
|
|
|
642
698
|
in_spatial_dims: Sequence[Dim],
|
|
643
699
|
*,
|
|
644
700
|
filter_size: Union[Sequence[Union[int, Dim]], int, Dim],
|
|
645
|
-
padding: str,
|
|
701
|
+
padding: Union[str, int, Sequence[int]],
|
|
646
702
|
strides: Union[Sequence[int], int] = 1,
|
|
647
703
|
dilation_rate: Union[Sequence[int], int] = 1,
|
|
648
704
|
description_prefix: Optional[str] = None,
|
|
@@ -658,11 +714,15 @@ def make_conv_out_spatial_dims(
|
|
|
658
714
|
if isinstance(dilation_rate, int):
|
|
659
715
|
dilation_rate = [dilation_rate] * nd
|
|
660
716
|
assert nd == len(in_spatial_dims) == len(filter_size) == len(strides) == len(dilation_rate)
|
|
661
|
-
|
|
717
|
+
if isinstance(padding, (int, str)):
|
|
718
|
+
padding = [padding] * nd
|
|
719
|
+
padding = [p.lower() if isinstance(p, str) else p for p in padding]
|
|
662
720
|
out_spatial_dims = []
|
|
663
721
|
for i in range(nd):
|
|
664
722
|
in_spatial_dim = in_spatial_dims[i]
|
|
665
|
-
if filter_size[i] == strides[i] == 1
|
|
723
|
+
if (filter_size[i] == strides[i] == 1 and padding[i] in ("valid", "same", 0)) or (
|
|
724
|
+
strides[i] == 1 and padding[i] == "same"
|
|
725
|
+
):
|
|
666
726
|
out_spatial_dims.append(in_spatial_dim)
|
|
667
727
|
else:
|
|
668
728
|
out_spatial_dim = _calc_out_dim(
|
|
@@ -670,7 +730,7 @@ def make_conv_out_spatial_dims(
|
|
|
670
730
|
filter_size=filter_size[i],
|
|
671
731
|
stride=strides[i],
|
|
672
732
|
dilation_rate=dilation_rate[i],
|
|
673
|
-
padding=padding,
|
|
733
|
+
padding=padding[i],
|
|
674
734
|
)
|
|
675
735
|
assert isinstance(out_spatial_dim, Dim)
|
|
676
736
|
if description_prefix and out_spatial_dim != in_spatial_dim:
|
|
@@ -681,7 +741,7 @@ def make_conv_out_spatial_dims(
|
|
|
681
741
|
filter_size=filter_size[i],
|
|
682
742
|
stride=strides[i],
|
|
683
743
|
dilation_rate=dilation_rate[i],
|
|
684
|
-
padding=padding,
|
|
744
|
+
padding=padding[i],
|
|
685
745
|
)
|
|
686
746
|
out_spatial_dims.append(out_spatial_dim)
|
|
687
747
|
return out_spatial_dims
|
|
@@ -695,7 +755,7 @@ def _calc_out_dim(in_dim, filter_size, stride, padding, dilation_rate=1):
|
|
|
695
755
|
:param int filter_size: e.g. 2, for the corresponding axis
|
|
696
756
|
:param int stride: e.g. 1, for the corresponding axis
|
|
697
757
|
:param int dilation_rate: e.g. 1
|
|
698
|
-
:param str padding: "valid" or "same"
|
|
758
|
+
:param str|int padding: "valid" or "same" or int
|
|
699
759
|
:return: the output dimension
|
|
700
760
|
:rtype: T
|
|
701
761
|
"""
|
|
@@ -712,13 +772,16 @@ def _calc_out_dim(in_dim, filter_size, stride, padding, dilation_rate=1):
|
|
|
712
772
|
return rf.ceil_divide(a, b)
|
|
713
773
|
return -(-a // b)
|
|
714
774
|
|
|
715
|
-
padding = padding.
|
|
775
|
+
padding = padding.lower() if isinstance(padding, str) else padding
|
|
716
776
|
# See tf.compat.v1.nn.convolution() documentation for more.
|
|
717
|
-
if padding == "
|
|
777
|
+
if padding == "same":
|
|
718
778
|
if isinstance(in_dim, Dim):
|
|
719
779
|
return in_dim.ceildiv_right(stride)
|
|
720
780
|
return ceildiv(in_dim, stride)
|
|
721
|
-
elif padding == "
|
|
781
|
+
elif padding == "valid" or isinstance(padding, int):
|
|
782
|
+
if isinstance(padding, int) and padding != 0:
|
|
783
|
+
assert padding > 0
|
|
784
|
+
in_dim = padding + in_dim + padding
|
|
722
785
|
if isinstance(in_dim, Dim):
|
|
723
786
|
filter_left_dilated = (filter_size - 1) * dilation_rate // 2
|
|
724
787
|
filter_right_dilated = (filter_size - 1) * dilation_rate - filter_left_dilated
|
|
@@ -726,4 +789,95 @@ def _calc_out_dim(in_dim, filter_size, stride, padding, dilation_rate=1):
|
|
|
726
789
|
return valid_part.ceildiv_right(stride)
|
|
727
790
|
return ceildiv(in_dim - (filter_size - 1) * dilation_rate, stride)
|
|
728
791
|
else:
|
|
729
|
-
raise
|
|
792
|
+
raise ValueError(f"invalid padding {padding!r} (type {type(padding).__name__})")
|
|
793
|
+
|
|
794
|
+
|
|
795
|
+
def _should_use_consistent_same_padding() -> bool:
|
|
796
|
+
"""
|
|
797
|
+
:return: whether to use the new consistent same padding with :func:`_consistent_same_padding`.
|
|
798
|
+
|
|
799
|
+
This is only needed for the case when we have striding and padding="same".
|
|
800
|
+
See :func:`_consistent_same_padding` for more details.
|
|
801
|
+
|
|
802
|
+
Check the global RETURNN config for the ``rf_use_consistent_same_padding``
|
|
803
|
+
on how we should handle the ``padding="same"`` case for convolution/pooling when there is striding.
|
|
804
|
+
If that is not specified, with behavior version >=24, we will use the new consistent same padding,
|
|
805
|
+
with behavior version <=23, we will not use it.
|
|
806
|
+
|
|
807
|
+
See issue `#1693 <https://github.com/rwth-i6/returnn/issues/1693>`__.
|
|
808
|
+
"""
|
|
809
|
+
from returnn.config import get_global_config
|
|
810
|
+
|
|
811
|
+
config = get_global_config(raise_exception=False)
|
|
812
|
+
config_value = None
|
|
813
|
+
if config:
|
|
814
|
+
if "rf_use_consistent_same_padding" in config.typed_dict:
|
|
815
|
+
config_value = config.typed_dict["rf_use_consistent_same_padding"]
|
|
816
|
+
assert config_value is None or isinstance(config_value, bool)
|
|
817
|
+
elif "rf_use_consistent_same_padding" in config.dict:
|
|
818
|
+
config_value = config.bool("rf_use_consistent_same_padding", None)
|
|
819
|
+
if config_value is not None:
|
|
820
|
+
return config_value
|
|
821
|
+
|
|
822
|
+
from returnn.util.basic import BehaviorVersion
|
|
823
|
+
|
|
824
|
+
return BehaviorVersion.get() >= 24
|
|
825
|
+
|
|
826
|
+
|
|
827
|
+
def _consistent_same_padding(
|
|
828
|
+
source: Tensor,
|
|
829
|
+
*,
|
|
830
|
+
in_spatial_dims: Sequence[Dim],
|
|
831
|
+
filter_size: Optional[Union[int, Dim, Sequence[int], Sequence[Dim]]],
|
|
832
|
+
dilation_rate: Optional[Union[int, Sequence[int]]] = None,
|
|
833
|
+
pad_value: Union[int, float],
|
|
834
|
+
) -> Tuple[Tensor, Sequence[Dim], Union[int, Sequence[int]]]:
|
|
835
|
+
"""
|
|
836
|
+
In case of striding and padding="same", the standard padding that we do (following TensorFlow)
|
|
837
|
+
depends on the current dimension size.
|
|
838
|
+
It adds padding left and right such that the first and last window
|
|
839
|
+
will have the same amount of padding (+-1).
|
|
840
|
+
With stride=1, this is the standard (filter_size-1)/2 left and right padding,
|
|
841
|
+
but with stride>1, this is not the case anymore.
|
|
842
|
+
(See also the explanation and calculation of padding in :func:`returnn.torch.frontend._backend.TorchBackend.conv`.)
|
|
843
|
+
However, the problem with this behavior is with batching:
|
|
844
|
+
The padding now depends on the longest sequence in the batch,
|
|
845
|
+
and thus is arbitrary for any of the other sequences.
|
|
846
|
+
|
|
847
|
+
The new consistent same padding adds padding independent of the current dimension size (largest seq in batch).
|
|
848
|
+
We just do the same as with stride=1, i.e. (filter_size-1)/2 left and right padding.
|
|
849
|
+
|
|
850
|
+
:return: source or padded source, in_spatial_dims or new in_spatial_dims, new padding on top of the output
|
|
851
|
+
"""
|
|
852
|
+
filter_size = _make_sequence(filter_size or 1, nd=len(in_spatial_dims))
|
|
853
|
+
dilation_rate = _make_sequence(dilation_rate or 1, nd=len(in_spatial_dims))
|
|
854
|
+
filter_size_ints = [s.dimension if isinstance(s, Dim) else s for s in filter_size]
|
|
855
|
+
if all(s % 2 == 1 for s in filter_size_ints):
|
|
856
|
+
# In this case, we can pass padding as integer to the backend, so that it adds the same padding left/right.
|
|
857
|
+
return source, in_spatial_dims, [(s // 2) * d for s, d in zip(filter_size_ints, dilation_rate)]
|
|
858
|
+
# Need to use the custom padding here.
|
|
859
|
+
paddings = []
|
|
860
|
+
for s, d in zip(filter_size, dilation_rate):
|
|
861
|
+
pad_left = (s - 1) * d // 2
|
|
862
|
+
pad_right = (s - 1) * d - pad_left
|
|
863
|
+
paddings.append((pad_left, pad_right))
|
|
864
|
+
# We expect that masking was already done before (or we don't care about it), thus handle_dynamic_dims=False.
|
|
865
|
+
source, in_spatial_dims = rf.pad(
|
|
866
|
+
source, axes=in_spatial_dims, padding=paddings, value=pad_value, handle_dynamic_dims=False
|
|
867
|
+
)
|
|
868
|
+
return source, in_spatial_dims, 0
|
|
869
|
+
|
|
870
|
+
|
|
871
|
+
def _make_sequence(value: Union[int, Sequence[int]], *, nd: int) -> Sequence[int]:
|
|
872
|
+
if isinstance(value, int):
|
|
873
|
+
return [value] * nd
|
|
874
|
+
assert len(value) == nd
|
|
875
|
+
return value
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
def _any_is_non_default(single_or_seq: Optional[Union[int, Sequence[int]]], *, default: int) -> bool:
|
|
879
|
+
if single_or_seq is None:
|
|
880
|
+
return False
|
|
881
|
+
if isinstance(single_or_seq, int):
|
|
882
|
+
return single_or_seq != default
|
|
883
|
+
return any(i != default for i in single_or_seq)
|
|
@@ -1271,9 +1271,9 @@ class _DimMixin:
|
|
|
1271
1271
|
if self.batch:
|
|
1272
1272
|
x_dim = x_dim.get_for_batch_ctx(self.batch, self.control_flow_ctx)
|
|
1273
1273
|
x_dim.complete_dyn_size(template_only=template_only, _backend=backend)
|
|
1274
|
-
if x_dim.dyn_size_ext is None and
|
|
1274
|
+
if x_dim.dyn_size_ext is None and x_dim.dimension is None:
|
|
1275
1275
|
return
|
|
1276
|
-
y = _bin_op(y, x_dim.dimension
|
|
1276
|
+
y = _bin_op(y, x_dim.dimension if x_dim.dimension is not None else x_dim.dyn_size_ext)
|
|
1277
1277
|
if not template_only and y.raw_tensor is not None:
|
|
1278
1278
|
y_max_value = _bin_op(y_max_value, x_dim.get_dim_value_tensor())
|
|
1279
1279
|
assert y is not None, f"op {op}?"
|
{returnn-1.20250228.104237 → returnn-1.20250304.101951}/returnn/tf/frontend_layers/_backend.py
RENAMED
|
@@ -998,7 +998,7 @@ class ReturnnLayersBackend(Backend[Layer]):
|
|
|
998
998
|
out_spatial_dims: Optional[Sequence[Dim]] = None,
|
|
999
999
|
filter: Tensor,
|
|
1000
1000
|
filter_size: Sequence[Dim], # to have the order well-defined
|
|
1001
|
-
padding: str,
|
|
1001
|
+
padding: Union[str, int, Sequence[int]],
|
|
1002
1002
|
strides: Optional[Union[int, Sequence[int]]] = None,
|
|
1003
1003
|
dilation_rate: Optional[Union[int, Sequence[int]]] = None,
|
|
1004
1004
|
groups: Optional[int] = None,
|
|
@@ -1088,7 +1088,7 @@ class ReturnnLayersBackend(Backend[Layer]):
|
|
|
1088
1088
|
*,
|
|
1089
1089
|
mode: str,
|
|
1090
1090
|
pool_size: Sequence[int],
|
|
1091
|
-
padding: str = "valid",
|
|
1091
|
+
padding: Union[str, int, Sequence[int]] = "valid",
|
|
1092
1092
|
dilation_rate: Union[Sequence[int], int] = 1,
|
|
1093
1093
|
strides: Sequence[int],
|
|
1094
1094
|
in_spatial_dims: Sequence[Dim],
|