returnn 1.20240905.152045__tar.gz → 1.20240906.11340__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.20240905.152045 → returnn-1.20240906.11340}/PKG-INFO +1 -1
- returnn-1.20240906.11340/_setup_info_generated.py +2 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_backend.py +5 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_utils.py +1 -1
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/array_.py +21 -10
- returnn-1.20240906.11340/returnn/frontend/loss.py +181 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/parameter.py +0 -2
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/_backend.py +7 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/frontend/_backend.py +9 -2
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn.egg-info/PKG-INFO +1 -1
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_array.py +17 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_base.py +115 -0
- returnn-1.20240905.152045/_setup_info_generated.py +0 -2
- returnn-1.20240905.152045/returnn/frontend/loss.py +0 -93
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/.editorconfig +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/.gitignore +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/.gitmodules +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/.kateconfig +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/CHANGELOG.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/CODEOWNERS +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/CONTRIBUTING.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/LICENSE +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/MANIFEST.in +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/README.rst +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/12AX.cluster_map +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/_setup_returnn_env.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-fwd.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-horovod-mpi.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-horovod-mpi.py.sh +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-horovod-mpi.sh +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-hyper-param-tuning.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-iter-dataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-list-devices.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-lua-torch-layer.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-pretrain.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-record-and-push-to-webserver.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-returnn-as-framework.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-rf-pt-benchmark.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-rf.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-rhn-enwik8.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-sprint-interface.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-att-copy.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-attention.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-enc-dec.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-hard-att-copy.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-lstm-benchmark.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-native-lstm.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-native-lstm2.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-neural-transducer.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-rec-explicit-lstm.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-rec-explicit-rnn.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-rec-self-att.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-search-compiled-graph.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-timit-lstm-ctc.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-torch.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo.sh +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/README.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/chars.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/config_demo +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/config_fwd +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/config_real +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/decode.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/go.sh +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/lines.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/split/eval.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/split/train.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/IAM/split/valid.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial/create_test_h5.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial/forwardconfig +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial/go.sh +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial/trainconfig +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial_rgb/go.sh +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/pyproject.toml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/requirements.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/__main__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/__old_mod_loader__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/__setup__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/config.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/audio.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/basic.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/bundle_file.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/cached.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/cached2.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/distrib_files.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/generating.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/hdf.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/lm.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/map.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/meta.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/multi_proc.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/normalization_data.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/numpy_dump.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/postprocessing.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/raw_wav.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/sprint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/stereo.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/util/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/util/feature_extraction.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/util/strings.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/datasets/util/vocabulary.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/engine/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/engine/base.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/engine/batch.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/__main__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/.git +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/edit.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/reroute.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/select.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/subgraph.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/transform.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/extern/graph_editor/util.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/forward_iface.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/backend.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/backend.hpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/module.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/module.hpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/py_utils.hpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/tensor_ops.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_native/tensor_ops.hpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_numpy_backend.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/_random_journal.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/attention.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/audio/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/audio/mel.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/audio/specaugment.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/backend.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/build_from_dict.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/cond.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/const.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/container.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/control_flow_ctx.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/conv.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/conversions/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/conversions/espnet_e_branchformer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/conversions/hf_llama.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/conversions/torch_nn.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/decoder/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/decoder/transformer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/device.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/dims.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/dropout.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/dtype.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/encoder/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/encoder/base.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/encoder/conformer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/encoder/e_branchformer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/gradient.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/graph.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/hooks.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/init.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/label_smoothing.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/linear.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/loop.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/math_.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/matmul.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/module.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/normalization.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/parametrizations.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/parametrize.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/piecewise_linear.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/rand.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/rec.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/reduce.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/run_ctx.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/signal.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/state.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/stepwise_scheduler.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/tensor_array.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/frontend/types.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/import_/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/import_/common.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/import_/git.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/import_/import_.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/learning_rate_control.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/log.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/native_op.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/native_op.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/pretrain.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/sprint/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/sprint/cache.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/sprint/control.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/sprint/error_signals.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/sprint/extern_interface.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/sprint/interface.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/_dim_extra.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/_tensor_extra.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/_tensor_mixin_base.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/_tensor_op_overloads.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/control_flow_ctx.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/dim.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/marked_dim.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/tensor.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/tensor_dict.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tensor/utils.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/compat.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/data_pipeline.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/distributed.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/engine.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/_utils.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/cond.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/dims.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/layer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/loop.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/make_layer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/masked_computation.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_low_level/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_low_level/_backend.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/horovod.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/hyper_param_tuning.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/layers/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/layers/base.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/layers/basic.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/layers/rec.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/layers/segmental_model.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/layers/signal_processing.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/layers/variable.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/native_op.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/network.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/sprint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/updater.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/util/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/util/basic.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/util/data.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/util/gradient_checkpoint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/util/ken_lm.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/util/open_fst.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/data/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/data/extern_data.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/data/pipeline.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/data/queued_data_iter.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/data/tensor_utils.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/distributed.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/engine.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/frontend/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/frontend/_rand.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/frontend/bridge.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/frontend/raw_ops.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/updater.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/util/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/util/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/util/array_.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/util/diagnose_gpu.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/util/gradient_checkpoint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/util/module.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/torch/util/scaled_gradient.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/__init__.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/basic.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/better_exchook.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/bpe.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/debug.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/debug_helpers.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/file_cache.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/fsa.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/literal_py_to_pickle.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/math.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/native_code_compiler.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/pprint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/py-to-pickle.cpp +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/py_compat.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/py_ext_mod_compiler.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/result_with_reason.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/sig_proc.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/task_system.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/train_proc_manager.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/util/watch_memory.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn.egg-info/SOURCES.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn.egg-info/dependency_links.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn.egg-info/top_level.txt +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/rnn.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/setup.cfg +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/setup.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/DummySprintExec.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm-inspection-profile.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/.gitignore +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/.name +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/misc.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/modules.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/returnn.iml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/_set_num_threads1.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/_setup_returnn_env.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/_setup_test_env.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/bpe-unicode-demo.codes +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/bpe-unicode-demo.vocab +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/lexicon_opt.fst +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/lexicon_opt.isyms +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/lexicon_opt.jpg +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/lexicon_opt.osyms +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/lint_common.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/pycharm-inspect.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/pylint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/returnn-as-framework.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/rf_utils.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/spelling.dic +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_Config.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_Dataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_Fsa.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_GeneratingDataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_HDFDataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_LearningRateControl.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_Log.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_MultiProcDataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_Pretrain.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_ResNet.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_SprintDataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_SprintInterface.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TFEngine.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TFNativeOp.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TFNetworkLayer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TFNetworkRecLayer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TFNetworkSigProcLayer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TFUpdater.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TFUtil.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TF_determinism.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TaskSystem.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TaskSystem_SharedMem.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_TranslationDataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_Util.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_demos.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_fork_exec.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_hdf_dump.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_attention.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_cond.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_const.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_container.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_conv.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_decoder_transformer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_encoder_conformer.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_gradient.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_label_smoothing.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_loop.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_math.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_normalization.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_piecewise_linear.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_rec.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_reduce.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_rf_signal.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_tensor.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_tools.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_torch_dataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_torch_engine.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_torch_frontend.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_torch_internal_frontend.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/test_torch_util.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tests/torch_utils.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/_setup_returnn_env.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/analyze-dataset-batches.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/bliss-collect-seq-lens.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/bliss-dump-text.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/bliss-get-segment-names.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/bliss-to-ogg-zip.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/bpe-create-lexicon.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/calculate-word-error-rate.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/cleanup-old-models.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/collect-orth-symbols.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/collect-words.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/compile_native_op.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/compile_tf_graph.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/debug-dump-search-scores.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/debug-plot-search-scores.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/dump-dataset-raw-strings.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/dump-dataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/dump-forward-stats.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/dump-forward.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/dump-network-json.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/dump-pickle.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/extract_state_tying_from_dataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/get-attention-weights.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/get-best-model-epoch.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/hdf_dump.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/hdf_dump_translation_dataset.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/import-blocks-mt-model.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/import-t2t-mt-model.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/.gitignore +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/Makefile +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/example/README.md +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/example/libs_list +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/example/state_vars_list +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/example/tensor_names_list +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/file.h +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/main.cc +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/rescorer.h +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/vocabulary.cc +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/lattice_rescorer/vocabulary.h +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/tf_avg_checkpoints.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/tf_inspect_checkpoint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/tf_inspect_summary_log.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/torch_avg_checkpoints.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/torch_export_to_onnx.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/torch_inspect_checkpoint.py +0 -0
- {returnn-1.20240905.152045 → returnn-1.20240906.11340}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
|
@@ -957,6 +957,11 @@ class Backend(Generic[T]):
|
|
|
957
957
|
"""slice"""
|
|
958
958
|
raise NotImplementedError
|
|
959
959
|
|
|
960
|
+
@staticmethod
|
|
961
|
+
def flip(source: Tensor, *, axis: Dim) -> Tensor:
|
|
962
|
+
"""flip"""
|
|
963
|
+
raise NotImplementedError
|
|
964
|
+
|
|
960
965
|
@staticmethod
|
|
961
966
|
def where(
|
|
962
967
|
cond: Tensor,
|
|
@@ -292,5 +292,5 @@ def _slice_value_is_reduce(v: Union[None, slice, int, numpy.number, numpy.ndarra
|
|
|
292
292
|
return v.ndim == 0
|
|
293
293
|
if isinstance(v, Tensor):
|
|
294
294
|
assert len(v.dims) <= 1, f"strided_slice: expect scalar or vector, got Tensor with dims {v.dims}"
|
|
295
|
-
return v.dims == 0
|
|
295
|
+
return len(v.dims) == 0
|
|
296
296
|
raise TypeError(f"strided_slice: got unexpected value of type {type(v).__name__}")
|
|
@@ -412,16 +412,17 @@ def pad(
|
|
|
412
412
|
:return: padded tensor, out_dims. out dims are for each dim in axes
|
|
413
413
|
"""
|
|
414
414
|
assert len(axes) == len(padding)
|
|
415
|
-
if not out_dims:
|
|
416
|
-
for left, right in padding:
|
|
417
|
-
if isinstance(left, Dim):
|
|
418
|
-
assert not left.need_masking(), f"padding {padding} does not support dynamic left padding"
|
|
419
|
-
if isinstance(right, Dim):
|
|
420
|
-
assert not right.need_masking(), f"padding {padding} does not support dynamic right padding"
|
|
421
|
-
# Note that even dynamic middle dims is not exactly correct...
|
|
422
|
-
out_dims = [left + middle + right for middle, (left, right) in zip(axes, padding)]
|
|
423
415
|
if handle_dynamic_dims is None:
|
|
424
416
|
handle_dynamic_dims = _pad_handle_dynamic_dims_default(axes, padding, mode=mode)
|
|
417
|
+
if not out_dims:
|
|
418
|
+
if handle_dynamic_dims:
|
|
419
|
+
for left, right in padding:
|
|
420
|
+
if isinstance(left, Dim):
|
|
421
|
+
assert not left.need_masking(), f"padding {padding} does not support dynamic left padding"
|
|
422
|
+
if isinstance(right, Dim):
|
|
423
|
+
assert not right.need_masking(), f"padding {padding} does not support dynamic right padding"
|
|
424
|
+
# Note that even dynamic middle dims is not exactly correct...
|
|
425
|
+
out_dims = [left + middle + right for middle, (left, right) in zip(axes, padding)]
|
|
425
426
|
# noinspection PyProtectedMember
|
|
426
427
|
return (
|
|
427
428
|
source._raw_backend.pad(
|
|
@@ -723,11 +724,14 @@ def slice(
|
|
|
723
724
|
:param axis:
|
|
724
725
|
:param start:
|
|
725
726
|
:param end:
|
|
726
|
-
:param step:
|
|
727
|
+
:param step: we only support a positive step here. If you want to flip the sequence,
|
|
728
|
+
use :func:`reverse_sequence`, maybe with ``handle_dynamic_dims=False``.
|
|
727
729
|
:param size:
|
|
728
730
|
:param out_dim:
|
|
729
731
|
:return: tensor, out_dim
|
|
730
732
|
"""
|
|
733
|
+
if isinstance(step, int) and step <= 0:
|
|
734
|
+
raise ValueError(f"rf.slice with non-positive step {step} not supported")
|
|
731
735
|
if not out_dim:
|
|
732
736
|
# Note: We cover not really all possible cases here but just those we really support.
|
|
733
737
|
# (Actually, it might still be a superset of cases we really support,
|
|
@@ -794,14 +798,21 @@ def shift_right(source: Tensor, *, axis: Dim, pad_value: Union[rf.RawTensorTypes
|
|
|
794
798
|
return padded_slice
|
|
795
799
|
|
|
796
800
|
|
|
797
|
-
def reverse_sequence(tensor: Tensor, *, axis: Dim) -> Tensor:
|
|
801
|
+
def reverse_sequence(tensor: Tensor, *, axis: Dim, handle_dynamic_dims: bool = True) -> Tensor:
|
|
798
802
|
"""
|
|
799
803
|
Similar as tf.reverse_sequence, or Torch flip (but taking seq lengths into account).
|
|
800
804
|
|
|
801
805
|
:param tensor:
|
|
802
806
|
:param axis:
|
|
807
|
+
:param handle_dynamic_dims: if True, the dynamic dims will be handled correctly,
|
|
808
|
+
i.e. a padded seq "a b c <pad>" will be reversed to "c b a <pad>".
|
|
809
|
+
If False, the dynamic dims will be handled as if they are static,
|
|
810
|
+
i.e. a padded seq "a b c <pad>" will be reversed to "<pad> c b a".
|
|
803
811
|
:return: reversed tensor, same dims
|
|
804
812
|
"""
|
|
813
|
+
if not handle_dynamic_dims or not axis.need_masking():
|
|
814
|
+
# noinspection PyProtectedMember
|
|
815
|
+
return tensor._raw_backend.flip(tensor, axis=axis)
|
|
805
816
|
indices = rf.combine_bc(axis.get_size_tensor(), "-", rf.range_over_dim(axis)) - 1
|
|
806
817
|
return rf.gather(tensor, indices=indices, axis=axis, clip_to_valid=True)
|
|
807
818
|
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Loss functions
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
from returnn.tensor import Tensor, Dim
|
|
7
|
+
import returnn.frontend as rf
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = ["cross_entropy", "ctc_loss", "edit_distance"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def cross_entropy(
|
|
14
|
+
*,
|
|
15
|
+
estimated: Tensor,
|
|
16
|
+
target: Tensor,
|
|
17
|
+
axis: Dim,
|
|
18
|
+
estimated_type: str,
|
|
19
|
+
) -> Tensor:
|
|
20
|
+
"""
|
|
21
|
+
``target`` is supposed to be in probability space (normalized). It can also be sparse, i.e. contain class indices.
|
|
22
|
+
``estimated`` can be probs, log-probs or logits, specified via ``estimated_type``.
|
|
23
|
+
|
|
24
|
+
Assuming both are in probability space, the cross entropy is:
|
|
25
|
+
|
|
26
|
+
H(target,estimated) = -reduce_sum(target * log(estimated), axis=axis)
|
|
27
|
+
= -matmul(target, log(estimated), reduce=axis)
|
|
28
|
+
|
|
29
|
+
In case you want label smoothing, you can use e.g.::
|
|
30
|
+
|
|
31
|
+
ce = nn.cross_entropy(
|
|
32
|
+
target=nn.label_smoothing(target, 0.1),
|
|
33
|
+
estimated=estimated)
|
|
34
|
+
|
|
35
|
+
:param estimated: probs, log-probs or logits, specified via ``estimated_type``
|
|
36
|
+
:param target: probs, normalized, can also be sparse
|
|
37
|
+
:param axis: class labels dim over which softmax is computed
|
|
38
|
+
:param estimated_type: "probs", "log-probs" or "logits"
|
|
39
|
+
:return: cross entropy (same Dims as 'estimated' but without 'axis')
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
if estimated_type == "logits":
|
|
43
|
+
# This is a common case and most backends provide optimized functions for it.
|
|
44
|
+
# noinspection PyProtectedMember
|
|
45
|
+
return estimated._raw_backend.softmax_cross_entropy_with_logits(logits=estimated, targets=target, axis=axis)
|
|
46
|
+
if estimated_type == "probs":
|
|
47
|
+
log_prob = rf.log(estimated) # TODO: make numerically stable
|
|
48
|
+
elif estimated_type == "log-probs":
|
|
49
|
+
log_prob = estimated
|
|
50
|
+
else:
|
|
51
|
+
raise ValueError("estimated_type must be 'probs', 'log-probs' or 'logits'")
|
|
52
|
+
if target.sparse_dim:
|
|
53
|
+
return -rf.gather(log_prob, indices=target, axis=axis)
|
|
54
|
+
return -rf.matmul(target, log_prob, reduce=axis)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def ctc_loss(
|
|
58
|
+
*,
|
|
59
|
+
logits: Tensor,
|
|
60
|
+
logits_normalized: bool = False,
|
|
61
|
+
targets: Tensor,
|
|
62
|
+
input_spatial_dim: Dim,
|
|
63
|
+
targets_spatial_dim: Dim,
|
|
64
|
+
blank_index: int,
|
|
65
|
+
max_approx: bool = False,
|
|
66
|
+
) -> Tensor:
|
|
67
|
+
"""
|
|
68
|
+
Calculates the CTC loss.
|
|
69
|
+
|
|
70
|
+
Internally, this uses :func:`returnn.tf.native_op.ctc_loss`
|
|
71
|
+
which is equivalent to tf.nn.ctc_loss but more efficient.
|
|
72
|
+
|
|
73
|
+
Output is of shape [B].
|
|
74
|
+
|
|
75
|
+
:param logits: (before softmax). shape [B...,input_spatial,C]
|
|
76
|
+
:param logits_normalized: whether the logits are already normalized (e.g. via log-softmax)
|
|
77
|
+
:param targets: sparse. shape [B...,targets_spatial] -> C
|
|
78
|
+
:param input_spatial_dim: spatial dim of input logits
|
|
79
|
+
:param targets_spatial_dim: spatial dim of targets
|
|
80
|
+
:param blank_index: vocab index of the blank symbol
|
|
81
|
+
:param max_approx: if True, use max instead of sum over alignments (max approx, Viterbi)
|
|
82
|
+
:return: loss shape [B...]
|
|
83
|
+
"""
|
|
84
|
+
# noinspection PyProtectedMember
|
|
85
|
+
return logits._raw_backend.ctc_loss(
|
|
86
|
+
logits=logits,
|
|
87
|
+
logits_normalized=logits_normalized,
|
|
88
|
+
targets=targets,
|
|
89
|
+
input_spatial_dim=input_spatial_dim,
|
|
90
|
+
targets_spatial_dim=targets_spatial_dim,
|
|
91
|
+
blank_index=blank_index,
|
|
92
|
+
max_approx=max_approx,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def edit_distance(a: Tensor, a_spatial_dim: Dim, b: Tensor, b_spatial_dim: Dim, *, dtype: str = "int32") -> Tensor:
|
|
97
|
+
"""
|
|
98
|
+
:param a: [B,Ta]
|
|
99
|
+
:param a_spatial_dim: Ta
|
|
100
|
+
:param b: [B,Tb]
|
|
101
|
+
:param b_spatial_dim: Tb
|
|
102
|
+
:param dtype:
|
|
103
|
+
:return: [B]
|
|
104
|
+
"""
|
|
105
|
+
import numpy # just for iinfo on dtype to get max value
|
|
106
|
+
|
|
107
|
+
# The axis permutation is just an efficiency optimization.
|
|
108
|
+
a = a.copy_transpose([a_spatial_dim] + a.remaining_dims(a_spatial_dim))
|
|
109
|
+
b = b.copy_transpose([b_spatial_dim] + b.remaining_dims(b_spatial_dim))
|
|
110
|
+
dev = a.device
|
|
111
|
+
max_dist_err = numpy.iinfo(dtype).max
|
|
112
|
+
n_a_max_len = a_spatial_dim.get_dim_value()
|
|
113
|
+
n_b_max_len = b_spatial_dim.get_dim_value()
|
|
114
|
+
if int(n_a_max_len) < int(n_b_max_len):
|
|
115
|
+
a, b = b, a
|
|
116
|
+
a_spatial_dim, b_spatial_dim = b_spatial_dim, a_spatial_dim
|
|
117
|
+
n_a_max_len, n_b_max_len = n_b_max_len, n_a_max_len
|
|
118
|
+
# Now n_a_max_len >= n_b_max_len.
|
|
119
|
+
batch_dims = a.remaining_dims(a_spatial_dim)
|
|
120
|
+
for dim in b.remaining_dims(b_spatial_dim):
|
|
121
|
+
if dim not in batch_dims:
|
|
122
|
+
batch_dims.append(dim)
|
|
123
|
+
a_seq_len = a_spatial_dim.get_dyn_size_ext_for_device(dev) # [B]
|
|
124
|
+
b_seq_len = b_spatial_dim.get_dyn_size_ext_for_device(dev) # [B]
|
|
125
|
+
a_tensor_ext, (a_spatial_dim_ext,) = rf.pad(
|
|
126
|
+
a, axes=[a_spatial_dim], padding=[(b_spatial_dim, b_spatial_dim)], handle_dynamic_dims=False
|
|
127
|
+
) # [Tb+Ta+Tb,B]
|
|
128
|
+
a_spatial_dim_ext: Dim
|
|
129
|
+
b_tensor_flipped = rf.reverse_sequence(b, axis=b_spatial_dim, handle_dynamic_dims=False) # [Tb,B]
|
|
130
|
+
entry_idx_ = rf.range_over_dim(b_spatial_dim, device=dev) # [Tb]->Tb
|
|
131
|
+
b_spatial_dim1 = b_spatial_dim + 1
|
|
132
|
+
buffer_dim = Dim(3 * b_spatial_dim1.get_dim_value_tensor(), name="buffer")
|
|
133
|
+
buffer = rf.Parameter([buffer_dim] + batch_dims, device=dev, dtype=dtype, auxiliary=True) # [3*(Tb+1),B]
|
|
134
|
+
buffer_offsets = [0, b_spatial_dim1.get_dim_value_tensor(), b_spatial_dim1.get_dim_value_tensor() * 2]
|
|
135
|
+
result = rf.where((a_seq_len == 0) & (b_seq_len == 0), 0, max_dist_err) # [B] # noqa
|
|
136
|
+
|
|
137
|
+
# We are going diagonal over (Ta+1) and (Tb+1). (Similar as RETURNN native EditDistanceOp.)
|
|
138
|
+
# You need to draw the grid on paper to understand all the index math...
|
|
139
|
+
for u in range(1, n_a_max_len + n_b_max_len + 1):
|
|
140
|
+
|
|
141
|
+
prev2_dist, _ = rf.slice(
|
|
142
|
+
buffer, axis=buffer_dim, start=buffer_offsets[u % 3], size=b_spatial_dim1, out_dim=b_spatial_dim1
|
|
143
|
+
) # [Tb+1,B]
|
|
144
|
+
prev_dist, _ = rf.slice(
|
|
145
|
+
buffer, axis=buffer_dim, start=buffer_offsets[(u + 1) % 3], size=b_spatial_dim1, out_dim=b_spatial_dim1
|
|
146
|
+
) # [Tb+1,B]
|
|
147
|
+
cur_dist_start_offset = buffer_offsets[(u + 2) % 3]
|
|
148
|
+
|
|
149
|
+
del_cost = (
|
|
150
|
+
rf.slice(prev_dist, axis=b_spatial_dim1, end=b_spatial_dim.get_dim_value_tensor(), out_dim=b_spatial_dim)[0]
|
|
151
|
+
+ 1
|
|
152
|
+
) # [Tb,B]
|
|
153
|
+
ins_cost = rf.slice(prev_dist, axis=b_spatial_dim1, start=1, out_dim=b_spatial_dim)[0] + 1 # [Tb,B]
|
|
154
|
+
sub_cost = rf.slice(prev2_dist, axis=b_spatial_dim1, start=1, out_dim=b_spatial_dim)[0] + rf.cast(
|
|
155
|
+
rf.slice(a_tensor_ext, axis=a_spatial_dim_ext, start=u - 1, size=b_spatial_dim, out_dim=b_spatial_dim)[0]
|
|
156
|
+
!= b_tensor_flipped,
|
|
157
|
+
dtype=dtype,
|
|
158
|
+
)
|
|
159
|
+
min_cost = rf.minimum(del_cost, ins_cost, sub_cost) # [Tb,B]
|
|
160
|
+
t_a_gt_zero_mask = entry_idx_ > n_b_max_len - u # [Tb]
|
|
161
|
+
|
|
162
|
+
buffer.assign_key(
|
|
163
|
+
axis=buffer_dim,
|
|
164
|
+
key=slice(cur_dist_start_offset, cur_dist_start_offset + b_spatial_dim.get_dim_value_tensor()),
|
|
165
|
+
key_dim=b_spatial_dim,
|
|
166
|
+
value=rf.where(t_a_gt_zero_mask, min_cost, u),
|
|
167
|
+
)
|
|
168
|
+
# last entry in cur_dist, that is where t_b == 0
|
|
169
|
+
buffer.assign_key(
|
|
170
|
+
axis=buffer_dim, key=cur_dist_start_offset + b_spatial_dim.get_dim_value_tensor(), key_dim=None, value=u
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
end_offset_a = n_b_max_len + a_seq_len - u # [B]
|
|
174
|
+
end_offset_b = n_b_max_len - b_seq_len # [B]
|
|
175
|
+
result = rf.where(
|
|
176
|
+
end_offset_a == end_offset_b,
|
|
177
|
+
rf.gather(buffer, axis=buffer_dim, indices=cur_dist_start_offset + end_offset_a, clip_to_valid=True),
|
|
178
|
+
result,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
return result
|
|
@@ -75,8 +75,6 @@ class Parameter(Tensor[T]):
|
|
|
75
75
|
raise TypeError(f"rf.Parameter: invalid type for dims_or_tensor: {type(dims_or_tensor)}")
|
|
76
76
|
if not all(isinstance(dim, Dim) for dim in dims):
|
|
77
77
|
raise TypeError(f"rf.Parameter: shape {dims} must be a sequence of Dim")
|
|
78
|
-
if not all(isinstance(dim.dimension, int) for dim in dims):
|
|
79
|
-
raise ValueError(f"rf.Parameter: shape {dims} must be static")
|
|
80
78
|
if len(dims) != len(set((d, d.match_priority) for d in dims)):
|
|
81
79
|
raise ValueError(f"rf.Parameter: shape {dims} dims must be unique")
|
|
82
80
|
super(Parameter, self).__init__(
|
{returnn-1.20240905.152045 → returnn-1.20240906.11340}/returnn/tf/frontend_layers/_backend.py
RENAMED
|
@@ -695,6 +695,13 @@ class ReturnnLayersBackend(Backend[Layer]):
|
|
|
695
695
|
{"class": "slice", "from": source, "axis": axis, "out_dim": out_dim, **args}, name="slice"
|
|
696
696
|
)
|
|
697
697
|
|
|
698
|
+
@staticmethod
|
|
699
|
+
def flip(source: Tensor, *, axis: Dim) -> Tensor:
|
|
700
|
+
"""flip"""
|
|
701
|
+
return rfl.make_layer(
|
|
702
|
+
{"class": "slice", "from": source, "axis": axis, "out_dim": axis, "slice_step": -1}, name="flip"
|
|
703
|
+
)
|
|
704
|
+
|
|
698
705
|
@staticmethod
|
|
699
706
|
def where(
|
|
700
707
|
cond: Tensor,
|
|
@@ -690,9 +690,8 @@ class TorchBackend(Backend[torch.Tensor]):
|
|
|
690
690
|
"""
|
|
691
691
|
:return: parameter
|
|
692
692
|
"""
|
|
693
|
-
assert all(d.is_static() for d in tensor.dims)
|
|
694
693
|
data = torch.zeros(
|
|
695
|
-
[d.
|
|
694
|
+
[d.get_dim_value() for d in tensor.dims],
|
|
696
695
|
dtype=TorchBackend.as_dtype_raw(tensor.dtype),
|
|
697
696
|
device=device or rf.get_default_device(),
|
|
698
697
|
)
|
|
@@ -1096,6 +1095,14 @@ class TorchBackend(Backend[torch.Tensor]):
|
|
|
1096
1095
|
out.raw_tensor = torch.narrow(source.raw_tensor, dim=axis_int, start=start, length=end - start)
|
|
1097
1096
|
return out
|
|
1098
1097
|
|
|
1098
|
+
@staticmethod
|
|
1099
|
+
def flip(source: Tensor, *, axis: Dim) -> Tensor:
|
|
1100
|
+
"""flip"""
|
|
1101
|
+
axis_int = source.get_axis_from_description(axis, allow_int=False)
|
|
1102
|
+
out = source.copy_template("flip")
|
|
1103
|
+
out.raw_tensor = torch.flip(source.raw_tensor, [axis_int])
|
|
1104
|
+
return out
|
|
1105
|
+
|
|
1099
1106
|
@staticmethod
|
|
1100
1107
|
def where(
|
|
1101
1108
|
cond: Tensor,
|
|
@@ -398,6 +398,23 @@ def test_reverse_sequence():
|
|
|
398
398
|
run_model(extern_data, lambda *, epoch, step: _Net(), _forward_step)
|
|
399
399
|
|
|
400
400
|
|
|
401
|
+
def test_reverse_sequence_no_dyn():
|
|
402
|
+
time_dim = Dim(Tensor("time", [batch_dim], dtype="int32"))
|
|
403
|
+
in_dim = Dim(7, name="in")
|
|
404
|
+
extern_data = TensorDict(
|
|
405
|
+
{
|
|
406
|
+
"data": Tensor("data", [batch_dim, time_dim, in_dim], dtype="float32"),
|
|
407
|
+
}
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
# noinspection PyShadowingNames
|
|
411
|
+
def _forward_step(*, extern_data: TensorDict, **_kwargs):
|
|
412
|
+
out = rf.reverse_sequence(extern_data["data"], axis=time_dim, handle_dynamic_dims=False)
|
|
413
|
+
out.mark_as_default_output(shape=(batch_dim, time_dim, in_dim))
|
|
414
|
+
|
|
415
|
+
run_model(extern_data, lambda *, epoch, step: rf.Module(), _forward_step)
|
|
416
|
+
|
|
417
|
+
|
|
401
418
|
def test_where():
|
|
402
419
|
time_dim = Dim(Tensor("time", [batch_dim], dtype="int32"))
|
|
403
420
|
in_dim = Dim(7, name="in")
|
|
@@ -560,3 +560,118 @@ def test_weight_noise():
|
|
|
560
560
|
rf.weight_noise(conv, "filter", std=0.1)
|
|
561
561
|
time_dim = Dim(11, name="time")
|
|
562
562
|
conv(rf.random_normal([time_dim, in_dim]), in_spatial_dim=time_dim)
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
def test_edit_distance():
|
|
566
|
+
import numpy
|
|
567
|
+
import torch
|
|
568
|
+
from typing import Sequence
|
|
569
|
+
from collections import namedtuple
|
|
570
|
+
import itertools
|
|
571
|
+
|
|
572
|
+
def _edit_distance_ref_b1(a: Sequence[int], b: Sequence[int]) -> int:
|
|
573
|
+
"""
|
|
574
|
+
Reference implementation for edit distance.
|
|
575
|
+
"""
|
|
576
|
+
n = len(a) + 1
|
|
577
|
+
m = len(b) + 1
|
|
578
|
+
d = torch.zeros((n, m), dtype=torch.int32)
|
|
579
|
+
for i in range(n):
|
|
580
|
+
d[i, 0] = i
|
|
581
|
+
for j in range(m):
|
|
582
|
+
d[0, j] = j
|
|
583
|
+
for j in range(1, m):
|
|
584
|
+
for i in range(1, n):
|
|
585
|
+
if a[i - 1] == b[j - 1]:
|
|
586
|
+
d[i, j] = d[i - 1, j - 1]
|
|
587
|
+
else:
|
|
588
|
+
d[i, j] = min(
|
|
589
|
+
d[i - 1, j] + 1, # deletion
|
|
590
|
+
d[i, j - 1] + 1, # insertion
|
|
591
|
+
d[i - 1, j - 1] + 1, # substitution
|
|
592
|
+
)
|
|
593
|
+
return int(d[n - 1, m - 1])
|
|
594
|
+
|
|
595
|
+
# noinspection PyShadowingNames
|
|
596
|
+
def _edit_distance_ref(a: Tensor, a_spatial_dim: Dim, b: Tensor, b_spatial_dim: Dim) -> torch.Tensor:
|
|
597
|
+
"""
|
|
598
|
+
Reference implementation for edit distance.
|
|
599
|
+
"""
|
|
600
|
+
batch_dim = a.dims[0]
|
|
601
|
+
assert a.dims == (batch_dim, a_spatial_dim) and b.dims == (batch_dim, b_spatial_dim)
|
|
602
|
+
res = []
|
|
603
|
+
for i in range(batch_dim.dimension):
|
|
604
|
+
assert a_spatial_dim.dyn_size[i] <= a.raw_tensor.size(1)
|
|
605
|
+
assert b_spatial_dim.dyn_size[i] <= b.raw_tensor.size(1)
|
|
606
|
+
res.append(
|
|
607
|
+
_edit_distance_ref_b1(
|
|
608
|
+
a.raw_tensor[i, : a_spatial_dim.dyn_size[i]], b.raw_tensor[i, : b_spatial_dim.dyn_size[i]]
|
|
609
|
+
)
|
|
610
|
+
)
|
|
611
|
+
return torch.tensor(res, dtype=torch.int32)
|
|
612
|
+
|
|
613
|
+
# noinspection PyShadowingNames
|
|
614
|
+
def _check_edit_distance(a: Tensor, a_spatial_dim: Dim, b: Tensor, b_spatial_dim: Dim):
|
|
615
|
+
ref = _edit_distance_ref(a, a_spatial_dim, b, b_spatial_dim)
|
|
616
|
+
res = rf.edit_distance(a, a_spatial_dim, b, b_spatial_dim)
|
|
617
|
+
assert res.raw_tensor.shape == ref.shape == a_spatial_dim.dyn_size.shape == b_spatial_dim.dyn_size.shape
|
|
618
|
+
assert len(ref.shape) == 1
|
|
619
|
+
print("ref:", ref, "res:", res.raw_tensor)
|
|
620
|
+
batch_size = ref.shape[0]
|
|
621
|
+
for i in range(batch_size):
|
|
622
|
+
assert res.raw_tensor[i] == ref[i], (
|
|
623
|
+
f"batch idx i={i}, a[i]={a.raw_tensor[i]} len {a_spatial_dim.dyn_size[i]},"
|
|
624
|
+
f" b[i]={b.raw_tensor[i]} len {b_spatial_dim.dyn_size[i]},"
|
|
625
|
+
f" ref[i]={ref[i]}, res[i]={res.raw_tensor[i]};\n"
|
|
626
|
+
f" a={a.raw_tensor} lens {a_spatial_dim.dyn_size},"
|
|
627
|
+
f" b={b.raw_tensor} lens {b_spatial_dim.dyn_size}"
|
|
628
|
+
)
|
|
629
|
+
assert (res.raw_tensor == ref).all()
|
|
630
|
+
|
|
631
|
+
SizedTensor = namedtuple("SizedTensor", ["tensor", "seq_lens"])
|
|
632
|
+
|
|
633
|
+
_SeqsB1 = [
|
|
634
|
+
SizedTensor(torch.tensor([[1, 2, 3, 4]]), torch.tensor([4])),
|
|
635
|
+
SizedTensor(torch.tensor([[1, 2, 3]]), torch.tensor([3])),
|
|
636
|
+
SizedTensor(torch.tensor([[1, 2, 4]]), torch.tensor([3])),
|
|
637
|
+
SizedTensor(torch.tensor([[1, 4]]), torch.tensor([2])),
|
|
638
|
+
SizedTensor(torch.tensor([[5, 2, 4]]), torch.tensor([3])),
|
|
639
|
+
SizedTensor(torch.tensor([[]], dtype=torch.int64), torch.tensor([0])),
|
|
640
|
+
]
|
|
641
|
+
|
|
642
|
+
for a, b in itertools.product(_SeqsB1, _SeqsB1):
|
|
643
|
+
a: SizedTensor
|
|
644
|
+
b: SizedTensor
|
|
645
|
+
# noinspection PyShadowingNames
|
|
646
|
+
batch_dim = Dim(1, name="batch")
|
|
647
|
+
a_spatial_dim = Dim(Tensor("a_sizes", [batch_dim], dtype="int64", raw_tensor=a.seq_lens))
|
|
648
|
+
b_spatial_dim = Dim(Tensor("b_sizes", [batch_dim], dtype="int64", raw_tensor=b.seq_lens))
|
|
649
|
+
a_ = Tensor("a", [batch_dim, a_spatial_dim], dtype="int64", raw_tensor=a.tensor)
|
|
650
|
+
b_ = Tensor("b", [batch_dim, b_spatial_dim], dtype="int64", raw_tensor=b.tensor)
|
|
651
|
+
_check_edit_distance(a_, a_spatial_dim, b_, b_spatial_dim)
|
|
652
|
+
|
|
653
|
+
rnd = numpy.random.RandomState(42)
|
|
654
|
+
for a, b in itertools.product(_SeqsB1, _SeqsB1):
|
|
655
|
+
batch_size = rnd.randint(2, 11)
|
|
656
|
+
a_max_len = rnd.randint(a.seq_lens[0], a.seq_lens[0] + 5)
|
|
657
|
+
b_max_len = rnd.randint(b.seq_lens[0], b.seq_lens[0] + 5)
|
|
658
|
+
a_sizes = rnd.randint(0, a_max_len + 1, size=(batch_size,))
|
|
659
|
+
b_sizes = rnd.randint(0, b_max_len + 1, size=(batch_size,))
|
|
660
|
+
a_sizes[0] = a.seq_lens[0]
|
|
661
|
+
b_sizes[0] = b.seq_lens[0]
|
|
662
|
+
a_max_len = max(a_sizes)
|
|
663
|
+
b_max_len = max(b_sizes)
|
|
664
|
+
a_values = rnd.randint(0, 10, (batch_size, a_max_len))
|
|
665
|
+
b_values = rnd.randint(0, 10, (batch_size, b_max_len))
|
|
666
|
+
a_values[0, : a.seq_lens[0]] = a.tensor[0, : a.seq_lens[0]]
|
|
667
|
+
b_values[0, : b.seq_lens[0]] = b.tensor[0, : b.seq_lens[0]]
|
|
668
|
+
a_sizes = torch.tensor(a_sizes, dtype=torch.int32)
|
|
669
|
+
b_sizes = torch.tensor(b_sizes, dtype=torch.int32)
|
|
670
|
+
|
|
671
|
+
# noinspection PyShadowingNames
|
|
672
|
+
batch_dim = Dim(batch_size, name="batch")
|
|
673
|
+
a_spatial_dim = Dim(Tensor("a_sizes", [batch_dim], dtype="int32", raw_tensor=a_sizes))
|
|
674
|
+
b_spatial_dim = Dim(Tensor("b_sizes", [batch_dim], dtype="int32", raw_tensor=b_sizes))
|
|
675
|
+
a_ = Tensor("a", [batch_dim, a_spatial_dim], dtype="int64", raw_tensor=torch.tensor(a_values))
|
|
676
|
+
b_ = Tensor("b", [batch_dim, b_spatial_dim], dtype="int64", raw_tensor=torch.tensor(b_values))
|
|
677
|
+
_check_edit_distance(a_, a_spatial_dim, b_, b_spatial_dim)
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Loss functions
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from __future__ import annotations
|
|
6
|
-
from returnn.tensor import Tensor, Dim
|
|
7
|
-
import returnn.frontend as rf
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
__all__ = ["cross_entropy", "ctc_loss"]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def cross_entropy(
|
|
14
|
-
*,
|
|
15
|
-
estimated: Tensor,
|
|
16
|
-
target: Tensor,
|
|
17
|
-
axis: Dim,
|
|
18
|
-
estimated_type: str,
|
|
19
|
-
) -> Tensor:
|
|
20
|
-
"""
|
|
21
|
-
``target`` is supposed to be in probability space (normalized). It can also be sparse, i.e. contain class indices.
|
|
22
|
-
``estimated`` can be probs, log-probs or logits, specified via ``estimated_type``.
|
|
23
|
-
|
|
24
|
-
Assuming both are in probability space, the cross entropy is:
|
|
25
|
-
|
|
26
|
-
H(target,estimated) = -reduce_sum(target * log(estimated), axis=axis)
|
|
27
|
-
= -matmul(target, log(estimated), reduce=axis)
|
|
28
|
-
|
|
29
|
-
In case you want label smoothing, you can use e.g.::
|
|
30
|
-
|
|
31
|
-
ce = nn.cross_entropy(
|
|
32
|
-
target=nn.label_smoothing(target, 0.1),
|
|
33
|
-
estimated=estimated)
|
|
34
|
-
|
|
35
|
-
:param estimated: probs, log-probs or logits, specified via ``estimated_type``
|
|
36
|
-
:param target: probs, normalized, can also be sparse
|
|
37
|
-
:param axis: class labels dim over which softmax is computed
|
|
38
|
-
:param estimated_type: "probs", "log-probs" or "logits"
|
|
39
|
-
:return: cross entropy (same Dims as 'estimated' but without 'axis')
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
if estimated_type == "logits":
|
|
43
|
-
# This is a common case and most backends provide optimized functions for it.
|
|
44
|
-
# noinspection PyProtectedMember
|
|
45
|
-
return estimated._raw_backend.softmax_cross_entropy_with_logits(logits=estimated, targets=target, axis=axis)
|
|
46
|
-
if estimated_type == "probs":
|
|
47
|
-
log_prob = rf.log(estimated) # TODO: make numerically stable
|
|
48
|
-
elif estimated_type == "log-probs":
|
|
49
|
-
log_prob = estimated
|
|
50
|
-
else:
|
|
51
|
-
raise ValueError("estimated_type must be 'probs', 'log-probs' or 'logits'")
|
|
52
|
-
if target.sparse_dim:
|
|
53
|
-
return -rf.gather(log_prob, indices=target, axis=axis)
|
|
54
|
-
return -rf.matmul(target, log_prob, reduce=axis)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def ctc_loss(
|
|
58
|
-
*,
|
|
59
|
-
logits: Tensor,
|
|
60
|
-
logits_normalized: bool = False,
|
|
61
|
-
targets: Tensor,
|
|
62
|
-
input_spatial_dim: Dim,
|
|
63
|
-
targets_spatial_dim: Dim,
|
|
64
|
-
blank_index: int,
|
|
65
|
-
max_approx: bool = False,
|
|
66
|
-
) -> Tensor:
|
|
67
|
-
"""
|
|
68
|
-
Calculates the CTC loss.
|
|
69
|
-
|
|
70
|
-
Internally, this uses :func:`returnn.tf.native_op.ctc_loss`
|
|
71
|
-
which is equivalent to tf.nn.ctc_loss but more efficient.
|
|
72
|
-
|
|
73
|
-
Output is of shape [B].
|
|
74
|
-
|
|
75
|
-
:param logits: (before softmax). shape [B...,input_spatial,C]
|
|
76
|
-
:param logits_normalized: whether the logits are already normalized (e.g. via log-softmax)
|
|
77
|
-
:param targets: sparse. shape [B...,targets_spatial] -> C
|
|
78
|
-
:param input_spatial_dim: spatial dim of input logits
|
|
79
|
-
:param targets_spatial_dim: spatial dim of targets
|
|
80
|
-
:param blank_index: vocab index of the blank symbol
|
|
81
|
-
:param max_approx: if True, use max instead of sum over alignments (max approx, Viterbi)
|
|
82
|
-
:return: loss shape [B...]
|
|
83
|
-
"""
|
|
84
|
-
# noinspection PyProtectedMember
|
|
85
|
-
return logits._raw_backend.ctc_loss(
|
|
86
|
-
logits=logits,
|
|
87
|
-
logits_normalized=logits_normalized,
|
|
88
|
-
targets=targets,
|
|
89
|
-
input_spatial_dim=input_spatial_dim,
|
|
90
|
-
targets_spatial_dim=targets_spatial_dim,
|
|
91
|
-
blank_index=blank_index,
|
|
92
|
-
max_approx=max_approx,
|
|
93
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-record-and-push-to-webserver.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{returnn-1.20240905.152045 → returnn-1.20240906.11340}/demos/demo-tf-chunking-blstm.12ax.config
RENAMED
|
File without changes
|