returnn 1.20240620.105009__tar.gz → 1.20240621.130142__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.20240620.105009 → returnn-1.20240621.130142}/CHANGELOG.md +142 -9
- {returnn-1.20240620.105009/returnn.egg-info → returnn-1.20240621.130142}/PKG-INFO +1 -1
- returnn-1.20240621.130142/_setup_info_generated.py +2 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/distrib_files.py +1 -1
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/vocabulary.py +41 -5
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/bpe.py +91 -53
- {returnn-1.20240620.105009 → returnn-1.20240621.130142/returnn.egg-info}/PKG-INFO +1 -1
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Util.py +132 -2
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bpe-create-lexicon.py +1 -1
- returnn-1.20240620.105009/_setup_info_generated.py +0 -2
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.editorconfig +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.gitignore +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.gitmodules +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/.kateconfig +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/CODEOWNERS +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/CONTRIBUTING.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/LICENSE +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/MANIFEST.in +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/README.rst +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/12AX.cluster_map +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/_setup_returnn_env.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-fwd.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-horovod-mpi.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-horovod-mpi.py.sh +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-horovod-mpi.sh +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-hyper-param-tuning.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-iter-dataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-list-devices.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-lua-torch-layer.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-pretrain.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-record-and-push-to-webserver.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-returnn-as-framework.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-rf-pt-benchmark.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-rf.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-rhn-enwik8.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-sprint-interface.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-att-copy.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-attention.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-chunking-blstm.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-contribrnn-lstm.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-enc-dec.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-hard-att-copy.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-lstm-benchmark.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-maxgradnorm-lstm.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm-lowmem.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm2.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-native-lstm2.12ax.tuned.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-neural-transducer.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-rec-explicit-lstm.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-rec-explicit-rnn.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-rec-self-att.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-search-compiled-graph.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-tf-vanilla-lstm.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-timit-lstm-ctc.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-torch.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo-upd-mult-model.lstm.12ax.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/demo.sh +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/IAM_lines/a01-000u-00.png +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/IAM_lines/a01-007-04.png +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/IAM_lines/a01-007-06.png +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/README.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/chars.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/config_demo +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/config_fwd +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/config_real +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/create_IAM_dataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/decode.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/features/raw/demo.h5 +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/go.sh +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/lines.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/split/eval.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/split/train.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/IAM/split/valid.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/create_test_h5.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/forwardconfig +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/go.sh +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial/trainconfig +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/create_test_h5.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/forwardconfig +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/go.sh +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/demos/mdlstm/artificial_rgb/trainconfig +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/pyproject.toml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/requirements.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__main__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__old_mod_loader__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/__setup__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/config.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/audio.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/basic.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/bundle_file.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/cached.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/cached2.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/generating.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/hdf.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/lm.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/map.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/meta.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/multi_proc.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/normalization_data.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/numpy_dump.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/raw_wav.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/sprint.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/stereo.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/feature_extraction.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/datasets/util/strings.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/engine/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/engine/base.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/engine/batch.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/__main__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/.git +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/.gitignore +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/LICENSE +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/aligner.gif +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/check.png +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/core.cu +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/core.h +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/core_cpu.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/LICENSE +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/MANIFEST.in +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/binding.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.cu +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/core.h +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/requirements.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/setup.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/pytorch_binding/warp_rna/test.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/ref_rna.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/setup.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op.cc +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/src/warp_rna_op_kernel_tmpl.h +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/tensorflow_binding/warp_rna/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/WarpRna/warp-rna/test.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/edit.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/reroute.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/select.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/subgraph.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/transform.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/extern/graph_editor/util.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/forward_iface.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_backend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/backend.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/backend.hpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/module.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/module.hpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/py_utils.hpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/tensor_ops.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_native/tensor_ops.hpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_numpy_backend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_random_journal.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/_utils.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/array_.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/attention.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/audio/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/audio/mel.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/audio/specaugment.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/backend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/build_from_dict.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/cond.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/const.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/container.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/control_flow_ctx.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/conv.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/decoder/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/decoder/transformer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/device.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/dims.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/dropout.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/dtype.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/encoder/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/encoder/base.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/encoder/conformer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/gradient.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/graph.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/hooks.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/init.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/label_smoothing.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/linear.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/loop.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/loss.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/math_.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/matmul.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/module.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/normalization.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/parameter.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/piecewise_linear.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/rand.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/rec.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/reduce.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/run_ctx.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/signal.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/state.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/stepwise_scheduler.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/tensor_array.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/frontend/types.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/common.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/git.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/import_/import_.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/learning_rate_control.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/log.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/native_op.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/native_op.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/pretrain.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/cache.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/control.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/error_signals.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/extern_interface.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/sprint/interface.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_dim_extra.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_tensor_extra.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_tensor_mixin_base.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/_tensor_op_overloads.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/control_flow_ctx.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/dim.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/marked_dim.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/tensor.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/tensor_dict.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tensor/utils.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/compat.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/data_pipeline.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/distributed.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/engine.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/_backend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/_utils.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/cond.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/config_entry_points.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/debug_eager_mode.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/dims.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/layer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/loop.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/make_layer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/masked_computation.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/parameter_assign.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_layers/prev_tensor_ref.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_low_level/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/frontend_low_level/_backend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/horovod.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/hyper_param_tuning.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/base.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/basic.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/rec.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/segmental_model.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/signal_processing.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/layers/variable.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/native_op.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/network.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/sprint.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/updater.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/basic.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/data.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/gradient_checkpoint.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/ken_lm.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/tf/util/open_fst.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/extern_data.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/pipeline.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/queued_data_iter.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/returnn_dataset_wrapper.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/data/tensor_utils.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/distributed.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/engine.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/_backend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/_rand.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/bridge.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/frontend/raw_ops.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/updater.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/diagnose_gpu.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/torch/util/scaled_gradient.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/__init__.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/basic.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/better_exchook.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/debug.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/debug_helpers.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/file_cache.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/fsa.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/literal_py_to_pickle.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/math.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/multi_proc_non_daemonic_spawn.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/native_code_compiler.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/pprint.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/py-to-pickle.cpp +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/py_compat.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/py_ext_mod_compiler.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/result_with_reason.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/sig_proc.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/task_system.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/train_proc_manager.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn/util/watch_memory.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn.egg-info/SOURCES.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn.egg-info/dependency_links.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/returnn.egg-info/top_level.txt +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/rnn.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/setup.cfg +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/setup.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/DummySprintExec.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm-inspection-profile.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/.gitignore +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/.name +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/codeStyleSettings.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/codeStyles/Project.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/codeStyles/codeStyleConfig.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/inspectionProfiles/Project_Default.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/misc.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/modules.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/returnn.iml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/PyCharm.idea/scopes/scope_settings.xml +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/_set_num_threads1.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/_setup_returnn_env.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/_setup_test_env.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/bpe-unicode-demo.codes +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/bpe-unicode-demo.vocab +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.fst +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.isyms +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.jpg +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lexicon_opt.osyms +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/lint_common.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/pycharm-inspect.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/pylint.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/returnn-as-framework.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/rf_utils.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/spelling.dic +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Config.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Dataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Fsa.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_GeneratingDataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_HDFDataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_LearningRateControl.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Log.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_MultiProcDataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_Pretrain.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_ResNet.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_SprintDataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_SprintInterface.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFEngine.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNativeOp.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNetworkLayer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNetworkRecLayer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFNetworkSigProcLayer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFUpdater.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TFUtil.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TF_determinism.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TaskSystem.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TaskSystem_SharedMem.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_TranslationDataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_demos.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_fork_exec.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_hdf_dump.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_array.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_attention.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_base.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_cond.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_const.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_container.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_conv.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_encoder_conformer.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_gradient.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_label_smoothing.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_loop.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_math.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_normalization.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_piecewise_linear.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_rec.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_reduce.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_rf_signal.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_tensor.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_tools.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_dataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_engine.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_frontend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tests/test_torch_internal_frontend.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/_setup_returnn_env.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/analyze-dataset-batches.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-collect-seq-lens.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-dump-text.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-get-segment-names.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/bliss-to-ogg-zip.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/calculate-word-error-rate.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/cleanup-old-models.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/collect-orth-symbols.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/collect-words.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/compile_native_op.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/compile_tf_graph.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/debug-dump-search-scores.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/debug-plot-search-scores.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-dataset-raw-strings.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-dataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-forward-stats.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-forward.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-network-json.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/dump-pickle.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/extract_state_tying_from_dataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/get-attention-weights.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/get-best-model-epoch.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/hdf_dump.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/hdf_dump_translation_dataset.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/import-blocks-mt-model.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/import-t2t-mt-model.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/.gitignore +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/Makefile +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/README.md +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/libs_list +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/network.040/i600_m600_m600.sgd_b16_lr0_cl2.newbobabs.keep_over_epoch.lstm2.config +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/rescore_lattice.sh +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/state_vars_list +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/example/tensor_names_list +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/file.h +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/htklatticerescorer.cc +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/htklatticerescorer.h +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/main.cc +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/rescorer.h +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/vocabulary.cc +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/lattice_rescorer/vocabulary.h +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/tf_avg_checkpoints.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/tf_inspect_checkpoint.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/tf_inspect_summary_log.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_avg_checkpoints.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_export_to_onnx.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_inspect_checkpoint.py +0 -0
- {returnn-1.20240620.105009 → returnn-1.20240621.130142}/tools/torch_inspect_checkpoint_and_opt.py +0 -0
|
@@ -6,6 +6,139 @@ or any changes which could potentially break or change the behavior of existing
|
|
|
6
6
|
This is intentionally kept short. For a full change log, just see the Git log.
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 2024-06-07: `VariableDataset`
|
|
10
|
+
|
|
11
|
+
Custom subdataset per subepoch based on user-provided function.
|
|
12
|
+
Can be useful for advanced training pipeline
|
|
13
|
+
where you create some HDFs on-the-fly (e.g. for alignments)
|
|
14
|
+
and then want to load them in later epochs.
|
|
15
|
+
|
|
16
|
+
## 2024-05-28: [`DistributeFilesDataset`](https://github.com/rwth-i6/returnn/blob/master/returnn/datasets/distrib_files.py) ([PR #1521](https://github.com/rwth-i6/returnn/pull/1521), [issue #1519](https://github.com/rwth-i6/returnn/issues/1519))
|
|
17
|
+
|
|
18
|
+
`DistributeDataset` together with `FileCache`
|
|
19
|
+
allows to train on very large datasets which do not fit on the local disk.
|
|
20
|
+
`DistributeDataset` operates on a list of files,
|
|
21
|
+
and for each sub-epoch will only select a subset of the files,
|
|
22
|
+
and `FileCache` will cache the files locally.
|
|
23
|
+
|
|
24
|
+
It also was specifically designed with distributed training in mind.
|
|
25
|
+
The distributed random_seed_offset method can be used,
|
|
26
|
+
but sharding is also supported ([PR #1538](https://github.com/rwth-i6/returnn/pull/1538)).
|
|
27
|
+
|
|
28
|
+
## 2023-11-09: `LearningRateControl` saves more meta info in learning-rate-file
|
|
29
|
+
|
|
30
|
+
Like effective learning rate (after `dynamic_learning_rate`),
|
|
31
|
+
training step, GPU, RETURNN version, etc.
|
|
32
|
+
(Was extended a bit over time.)
|
|
33
|
+
|
|
34
|
+
## 2024-01-09: [Train proc manager](https://github.com/rwth-i6/returnn/blob/master/returnn/util/train_proc_manager.py)
|
|
35
|
+
|
|
36
|
+
Auto restart RETURNN on crashes under certain conditions
|
|
37
|
+
(e.g. it must have trained at least one epoch successfully since the most recent restart).
|
|
38
|
+
|
|
39
|
+
## 2023-12-30: PyTorch handle OOM for forwarding, auto-split batch
|
|
40
|
+
|
|
41
|
+
This went through several iterations of approaches,
|
|
42
|
+
stumbling through a number of CPython and PyTorch bugs,
|
|
43
|
+
e.g. [CPython #113939](https://github.com/python/cpython/issues/113939),
|
|
44
|
+
[PyTorch #18853](https://github.com/pytorch/pytorch/issues/18853),
|
|
45
|
+
[PyTorch #27600](https://github.com/pytorch/pytorch/issues/27600).
|
|
46
|
+
|
|
47
|
+
## 2023-12-23: PyTorch distributed training with param averaging
|
|
48
|
+
|
|
49
|
+
In the `torch_distributed` config dict: Set `"reduce_type": "param"` and `"param_sync_step": ...`.
|
|
50
|
+
|
|
51
|
+
## 2023-10-24: [`watch_memory`](https://github.com/rwth-i6/returnn/blob/master/returnn/util/watch_memory.py): watches memory of all procs
|
|
52
|
+
|
|
53
|
+
## 2023-10-03: RETURNN frontend (RF) native helpers ([PR #1403](https://github.com/rwth-i6/returnn/pull/1403))
|
|
54
|
+
|
|
55
|
+
## 2023-06-09: PyTorch distributed training ([PR #1335](https://github.com/rwth-i6/returnn/pull/1335), [issue #1332](https://github.com/rwth-i6/returnn/issues/1332))
|
|
56
|
+
|
|
57
|
+
`torch_distributed` config setting.
|
|
58
|
+
Using the official PyTorch `DistributedDataParallel`, i.e. synchronized accumulated gradients.
|
|
59
|
+
Each worker uses a different `random_seed_offset` for the dataset.
|
|
60
|
+
|
|
61
|
+
## 2023-05-15: PyTorch automatic mixed precision (AMP) support ([PR #1322](https://github.com/rwth-i6/returnn/pull/1322))
|
|
62
|
+
|
|
63
|
+
## 2023-04-03: PyTorch `preload_from_files` support ([PR #1292](https://github.com/rwth-i6/returnn/pull/1292))
|
|
64
|
+
|
|
65
|
+
## 2023-03-26: [`MultiProcDataset`](https://github.com/rwth-i6/returnn/blob/master/returnn/datasets/multi_proc.py)
|
|
66
|
+
|
|
67
|
+
## 2023-02-24: Make [`Tensor` and `Dim`](https://returnn.readthedocs.io/en/latest/getting_started/data.html) backend independent ([PR #1261](https://github.com/rwth-i6/returnn/pull/1261), [issue #1165](https://github.com/rwth-i6/returnn/issues/1165))
|
|
68
|
+
|
|
69
|
+
* Rename `Data` to `Tensor`, `DimensionTag` to `Dim`.
|
|
70
|
+
* Before, in our `Tensor`, the `placeholder` (now `raw_tensor`) was either None (as a template)
|
|
71
|
+
or a TensorFlow tensor (`tf.Tensor`).
|
|
72
|
+
Now it can support any raw tensor type.
|
|
73
|
+
* Now `Tensor` and `Dim` are moved to `returnn.tensor`.
|
|
74
|
+
|
|
75
|
+
## 2023-02-20: RETURNN frontend (RF) ([issue #1120](https://github.com/rwth-i6/returnn/issues/1120), [issue #1264](https://github.com/rwth-i6/returnn/issues/1264))
|
|
76
|
+
|
|
77
|
+
Modern alternative to the network dictionary to define models.
|
|
78
|
+
Using Python code to define the network,
|
|
79
|
+
very similar to how it is done in PyTorch or Keras or Flax.
|
|
80
|
+
|
|
81
|
+
This evolved from [`returnn_common.nn`](https://github.com/rwth-i6/returnn_common/tree/main/nn) ([example](https://github.com/rwth-i6/returnn_common/wiki/RETURNN-example-config)),
|
|
82
|
+
which provided already a very similar API.
|
|
83
|
+
But now, we build it such that we support multiple backends.
|
|
84
|
+
Specifically, the current supported (or planned) backends:
|
|
85
|
+
|
|
86
|
+
* PyTorch (fully supported)
|
|
87
|
+
* RETURNN network dictionary (TensorFlow) (fully supported)
|
|
88
|
+
(copied the `returnn_common.nn` code)
|
|
89
|
+
(this might be deprecated in the future)
|
|
90
|
+
* TensorFlow (directly) (mostly supported)
|
|
91
|
+
* NumPy (partially supported)
|
|
92
|
+
* JAX (planned)
|
|
93
|
+
|
|
94
|
+
## 2023-02-03: Use `black`, drop Python 2 support ([PR #1255](https://github.com/rwth-i6/returnn/pull/1255), [issue #487](https://github.com/rwth-i6/returnn/issues/487), [issue #1158](https://github.com/rwth-i6/returnn/issues/1158))
|
|
95
|
+
|
|
96
|
+
## 2022-10-24: Remove Theano backend ([PR #1164](https://github.com/rwth-i6/returnn/pull/1164))
|
|
97
|
+
|
|
98
|
+
## 2022-09-12: PyTorch backend started ([issue #1120](https://github.com/rwth-i6/returnn/issues/1120))
|
|
99
|
+
|
|
100
|
+
This evolved over time.
|
|
101
|
+
It was planned from the beginning
|
|
102
|
+
to support pure PyTorch models defined by the user
|
|
103
|
+
but also RETURNN frontend (RF) models.
|
|
104
|
+
|
|
105
|
+
## 2022-04-24: TF eager execution initial support
|
|
106
|
+
|
|
107
|
+
## 2022-02-11: TF loss auto-flatten optimization ([PR #906](https://github.com/rwth-i6/returnn/pull/906))
|
|
108
|
+
|
|
109
|
+
## 2021-09-12: TF generalized attention, `CumConcatLayer` ([PR #589](https://github.com/rwth-i6/returnn/pull/589), [issue #391](https://github.com/rwth-i6/returnn/issues/391))
|
|
110
|
+
|
|
111
|
+
Generalizes `SelfAttentionLayer` to allow for more custom variants.
|
|
112
|
+
The difficulties were to support this when being inside a `RecLayer`
|
|
113
|
+
and then when the optimization would move it outside the loop.
|
|
114
|
+
For this, we introduced `CumConcatLayer`.
|
|
115
|
+
[Example config for decoder self-attention](https://github.com/rwth-i6/returnn/issues/391#issuecomment-917517032).
|
|
116
|
+
This can also be used just in the encoder, i.e. outside a `RecLayer` anyway
|
|
117
|
+
via `ReinterpretDataLayer` to create a new dim tag.
|
|
118
|
+
[Example config for encoder self-attention](https://github.com/rwth-i6/returnn/issues/391#issuecomment-919873563).
|
|
119
|
+
|
|
120
|
+
## 2021-08-25: Explicit `Data` dimension tags ([PR #579](https://github.com/rwth-i6/returnn/pull/579))
|
|
121
|
+
|
|
122
|
+
`Data` (later called `Tensor`) has `dim_tags` (later called `dims`)
|
|
123
|
+
to describe the full shape, i.e. the dims of each axis.
|
|
124
|
+
These are `DimensionTag` (later `Dim`) objects.
|
|
125
|
+
Before this change, we already had dim tags but only for dynamic dims.
|
|
126
|
+
Now they are consistently used for all dims.
|
|
127
|
+
This makes everything more consistent and more in line
|
|
128
|
+
with other named tensors / named dimensions frameworks.
|
|
129
|
+
|
|
130
|
+
## 2021-06-11: [Behavior versions](https://returnn.readthedocs.io/en/latest/configuration_reference/behavior_version.html) ([PR #534](https://github.com/rwth-i6/returnn/pull/534), [issue #508](https://github.com/rwth-i6/returnn/issues/508))
|
|
131
|
+
|
|
132
|
+
Setting `behavior_version` in config control the behavior of RETURNN
|
|
133
|
+
and allows to update bad/buggy/broken behavior without changing behavior for existing setups.
|
|
134
|
+
|
|
135
|
+
## 2021-06-04: Start of [`returnn_common.nn`](https://github.com/rwth-i6/returnn_common/tree/main/nn)
|
|
136
|
+
|
|
137
|
+
Allows to define the RETURNN network dictionary using a more modern Python API,
|
|
138
|
+
very similar to PyTorch or Keras.
|
|
139
|
+
[Example](https://github.com/rwth-i6/returnn_common/wiki/RETURNN-example-config).
|
|
140
|
+
Note that this later got merged into RETURNN frontend (RF).
|
|
141
|
+
|
|
9
142
|
## 2021-03-18: Subnetwork sub layer can be independent ([#473](https://github.com/rwth-i6/returnn/pull/473))
|
|
10
143
|
|
|
11
144
|
This has an effect on recurrent subnetworks.
|
|
@@ -103,25 +236,25 @@ This will show the same information as before, but much more compact,
|
|
|
103
236
|
and also in addition the dimension tags (`DimensionTag`),
|
|
104
237
|
which also got improved in many further cases.
|
|
105
238
|
|
|
106
|
-
## 2019-08-07:
|
|
239
|
+
## 2019-08-07: Overlay nets (`extra_nets`)
|
|
107
240
|
|
|
108
241
|
You can have e.g. multiple additional networks which redefine
|
|
109
242
|
existing layers (they would automatically share params),
|
|
110
243
|
which can use different flags (e.g. enable the search flag).
|
|
111
244
|
|
|
112
|
-
## 2019-07:
|
|
245
|
+
## 2019-07: Multiple stochastic (latent) variables
|
|
113
246
|
|
|
114
247
|
It was designed to support this from the very beginning,
|
|
115
248
|
but the implementation was never fully finished for this.
|
|
116
249
|
Now examples like hard attention work.
|
|
117
250
|
|
|
118
|
-
## 2019-05:
|
|
251
|
+
## 2019-05: Better support for RETURNN as a framework
|
|
119
252
|
|
|
120
253
|
`pip install returnn`, and then `import returnn`.
|
|
121
254
|
|
|
122
|
-
## 2019-03-29:
|
|
255
|
+
## 2019-03-29: Remove hard Theano dependency
|
|
123
256
|
|
|
124
|
-
## 2019-03-24 and ongoing:
|
|
257
|
+
## 2019-03-24 and ongoing: Automatic linter checks
|
|
125
258
|
|
|
126
259
|
Currently pylint and PyCharm inspection checks automatically run in Travis.
|
|
127
260
|
Both have some false positives, but so far the PyCharm inspections seems much more sane.
|
|
@@ -180,16 +313,16 @@ and then later `SplitBatchTimeLayer` to get the time-axis back, it was likely in
|
|
|
180
313
|
|
|
181
314
|
## 2019-01-30: video: RETURNN overview
|
|
182
315
|
|
|
183
|
-
## 2018-08:
|
|
316
|
+
## 2018-08: Multi-GPU support via [Horovod](https://github.com/horovod/horovod)
|
|
184
317
|
|
|
185
|
-
## 2017-05:
|
|
318
|
+
## 2017-05: Flexible `RecLayer`, encoder-decoder attention, beam search (Albert Zeyer)
|
|
186
319
|
|
|
187
|
-
## 2016-12:
|
|
320
|
+
## 2016-12: Start on [TensorFlow](https://www.tensorflow.org/) support (Albert Zeyer)
|
|
188
321
|
|
|
189
322
|
Initial working support already finished within that month.
|
|
190
323
|
TF 0.12.0.
|
|
191
324
|
|
|
192
|
-
## 2015-07:
|
|
325
|
+
## 2015-07: Fast CUDA LSTM kernel (Paul Voigtlaender)
|
|
193
326
|
## 2015-03: `SprintDataset`, interface to [RASR](https://www-i6.informatik.rwth-aachen.de/rwth-asr/) (Albert Zeyer)
|
|
194
327
|
## 2015-01: Albert Zeyer joined
|
|
195
328
|
## ~2013-2014 (?): Patrick Doetsch started the project (Theano)
|
|
@@ -161,7 +161,7 @@ class DistributeFilesDataset(CachedDataset2):
|
|
|
161
161
|
self._file_sizes: Optional[Dict[str, int]] = None # key -> size. for equal distribution across sub epochs
|
|
162
162
|
self._data_keys: Optional[List[str]] = None
|
|
163
163
|
self._num_seqs: Optional[int] = None
|
|
164
|
-
self._shard_index, self._num_shards = _get_rank_and_size() if distrib_shard_files else 0, 1
|
|
164
|
+
self._shard_index, self._num_shards = _get_rank_and_size() if distrib_shard_files else (0, 1)
|
|
165
165
|
|
|
166
166
|
self._file_cache: Optional[_FileCacheProc] = None
|
|
167
167
|
self._workers: Dict[int, _WorkerProcParent] = {} # epoch -> worker
|
|
@@ -19,6 +19,7 @@ import sys
|
|
|
19
19
|
import numpy
|
|
20
20
|
|
|
21
21
|
from returnn.log import log
|
|
22
|
+
from returnn.util.basic import NotSpecified
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class Vocabulary(object):
|
|
@@ -327,14 +328,48 @@ class SamplingBytePairEncoding(Vocabulary):
|
|
|
327
328
|
This will encode the text on-the-fly with BPE.
|
|
328
329
|
"""
|
|
329
330
|
|
|
330
|
-
def __init__(
|
|
331
|
+
def __init__(
|
|
332
|
+
self,
|
|
333
|
+
vocab_file: str,
|
|
334
|
+
breadth_prob: float,
|
|
335
|
+
seq_postfix: Optional[List[int]] = None,
|
|
336
|
+
label_postfix_merge_symbol: Optional[str] = NotSpecified,
|
|
337
|
+
word_prefix_symbol: Optional[str] = NotSpecified,
|
|
338
|
+
**kwargs,
|
|
339
|
+
):
|
|
331
340
|
"""
|
|
332
|
-
:param
|
|
333
|
-
:param
|
|
334
|
-
:param
|
|
341
|
+
:param vocab_file:
|
|
342
|
+
:param breadth_prob:
|
|
343
|
+
:param seq_postfix: labels will be added to the seq in self.get_seq
|
|
344
|
+
:param label_postfix_merge_symbol: If given, will use this as label postfix merge symbol,
|
|
345
|
+
i.e. when this occurs at the end of a label, it is supposed to be merged with the next label,
|
|
346
|
+
i.e. the space between them is removed and is not a word boundary.
|
|
347
|
+
If None, will not use any postfix merge symbol.
|
|
348
|
+
If not specified, and also word_prefix_symbol is not specified, will use "@@" by default here,
|
|
349
|
+
the standard from subword-nmt, and our original behavior.
|
|
350
|
+
:param word_prefix_symbol: If given, every new word starts with this symbol.
|
|
351
|
+
This also implies that there are no spaces between words
|
|
352
|
+
and this symbol is a placeholder for the space.
|
|
353
|
+
If None, will not use this logic.
|
|
354
|
+
For SentencePiece, you usually would use "▁" here.
|
|
335
355
|
"""
|
|
336
356
|
super(SamplingBytePairEncoding, self).__init__(vocab_file=vocab_file, seq_postfix=seq_postfix, **kwargs)
|
|
337
|
-
from returnn.util.bpe import SamplingBytePairEncoder
|
|
357
|
+
from returnn.util.bpe import SamplingBytePairEncoder, BpePostMergeSymbol, BpeOpts
|
|
358
|
+
|
|
359
|
+
if label_postfix_merge_symbol is NotSpecified and word_prefix_symbol is NotSpecified:
|
|
360
|
+
label_postfix_merge_symbol = BpePostMergeSymbol
|
|
361
|
+
word_prefix_symbol = None
|
|
362
|
+
else:
|
|
363
|
+
if label_postfix_merge_symbol is NotSpecified:
|
|
364
|
+
label_postfix_merge_symbol = None
|
|
365
|
+
if word_prefix_symbol is NotSpecified:
|
|
366
|
+
word_prefix_symbol = None
|
|
367
|
+
if word_prefix_symbol is not None:
|
|
368
|
+
# I'm not sure if this makes sense otherwise...
|
|
369
|
+
assert label_postfix_merge_symbol is None, (
|
|
370
|
+
f"{self}: word_prefix_symbol {word_prefix_symbol},"
|
|
371
|
+
f" label_postfix_merge_symbol {label_postfix_merge_symbol}"
|
|
372
|
+
)
|
|
338
373
|
|
|
339
374
|
self.rnd = numpy.random.RandomState(0)
|
|
340
375
|
self.bpe = SamplingBytePairEncoder(
|
|
@@ -342,6 +377,7 @@ class SamplingBytePairEncoding(Vocabulary):
|
|
|
342
377
|
breadth_prob=breadth_prob,
|
|
343
378
|
rnd=self.rnd,
|
|
344
379
|
unknown_label=self.id_to_label(self.unknown_label_id) if self.unknown_label_id is not None else None,
|
|
380
|
+
opts=BpeOpts(label_postfix_merge_symbol=label_postfix_merge_symbol, word_prefix_symbol=word_prefix_symbol),
|
|
345
381
|
)
|
|
346
382
|
|
|
347
383
|
def set_random_seed(self, seed):
|
|
@@ -4,6 +4,7 @@ Provide basic Byte-Pair-Encoding (BPE) utilities.
|
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
from typing import Optional, List, Dict, Callable
|
|
7
|
+
from dataclasses import dataclass
|
|
7
8
|
import re
|
|
8
9
|
import numpy
|
|
9
10
|
|
|
@@ -227,70 +228,69 @@ class StandardBytePairEncoder:
|
|
|
227
228
|
return output
|
|
228
229
|
|
|
229
230
|
|
|
231
|
+
@dataclass
|
|
232
|
+
class BpeOpts:
|
|
233
|
+
"""
|
|
234
|
+
Options, should allow for both subword-nmt BPE and SentencePiece BPE/Unigram.
|
|
235
|
+
"""
|
|
236
|
+
|
|
237
|
+
label_postfix_merge_symbol: Optional[str] = None # eg. "@@"
|
|
238
|
+
word_prefix_symbol: Optional[str] = None # eg. "▁"
|
|
239
|
+
|
|
240
|
+
|
|
230
241
|
class PrefixTree:
|
|
231
242
|
"""
|
|
232
243
|
Prefix tree / trie.
|
|
233
244
|
This class represents both a single node and the tree.
|
|
234
245
|
"""
|
|
235
246
|
|
|
236
|
-
def __init__(self, prefix: str = "",
|
|
247
|
+
def __init__(self, *, prefix: str = "", opts: BpeOpts):
|
|
237
248
|
"""
|
|
238
|
-
:param prefix:
|
|
239
|
-
:param root:
|
|
249
|
+
:param prefix: if this is not the root, the prefix to get here
|
|
240
250
|
"""
|
|
241
251
|
self.prefix = prefix
|
|
242
252
|
self.arcs: Dict[str, PrefixTree] = {} # single char (or BpePostMergeSymbol) -> sub tree
|
|
243
|
-
self.finished = False #
|
|
253
|
+
self.finished = False # label finished here
|
|
244
254
|
self.bpe_finished = False # partial word finished here with BpePostMergeSymbol at end
|
|
245
|
-
self.
|
|
246
|
-
self.root = root
|
|
255
|
+
self.opts = opts
|
|
247
256
|
|
|
248
|
-
def add(self, postfix: str
|
|
257
|
+
def add(self, postfix: str) -> PrefixTree:
|
|
249
258
|
"""
|
|
250
259
|
:param postfix:
|
|
251
|
-
:param root:
|
|
252
260
|
"""
|
|
253
|
-
if not root:
|
|
254
|
-
if self.is_root:
|
|
255
|
-
root = self
|
|
256
|
-
else:
|
|
257
|
-
assert self.root
|
|
258
|
-
root = self.root
|
|
259
261
|
self_ = self
|
|
262
|
+
opts = self.opts
|
|
263
|
+
label_postfix_merge_symbol = self.opts.label_postfix_merge_symbol
|
|
260
264
|
while True:
|
|
261
|
-
if
|
|
265
|
+
if self_ is self and opts.word_prefix_symbol and postfix.startswith(opts.word_prefix_symbol):
|
|
266
|
+
arc = opts.word_prefix_symbol
|
|
267
|
+
elif postfix == label_postfix_merge_symbol:
|
|
262
268
|
arc = postfix
|
|
263
|
-
postfix_ = ""
|
|
264
269
|
else:
|
|
265
270
|
arc = postfix[:1]
|
|
266
|
-
|
|
271
|
+
postfix_ = postfix[len(arc) :]
|
|
267
272
|
if arc in self_.arcs:
|
|
268
273
|
child = self_.arcs[arc]
|
|
269
274
|
else:
|
|
270
|
-
child = PrefixTree(
|
|
275
|
+
child = PrefixTree(prefix=self_.prefix + arc, opts=opts)
|
|
271
276
|
self_.arcs[arc] = child
|
|
272
|
-
if arc ==
|
|
277
|
+
if arc == label_postfix_merge_symbol and not postfix_:
|
|
273
278
|
self_.bpe_finished = True
|
|
274
|
-
if postfix_:
|
|
275
|
-
self_ = child
|
|
276
|
-
postfix = postfix_
|
|
277
|
-
else:
|
|
279
|
+
if not postfix_:
|
|
278
280
|
child.finished = True
|
|
279
281
|
return child
|
|
282
|
+
self_ = child
|
|
283
|
+
postfix = postfix_
|
|
280
284
|
|
|
281
285
|
|
|
286
|
+
@dataclass
|
|
282
287
|
class Hyp:
|
|
283
288
|
"""
|
|
284
289
|
Represents a hypothesis in the search.
|
|
285
290
|
"""
|
|
286
291
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
:param list[str] bpe_sym_history:
|
|
290
|
-
:param PrefixTree cur_node:
|
|
291
|
-
"""
|
|
292
|
-
self.bpe_sym_history = bpe_sym_history
|
|
293
|
-
self.cur_node = cur_node
|
|
292
|
+
bpe_sym_history: List[str]
|
|
293
|
+
cur_node: PrefixTree
|
|
294
294
|
|
|
295
295
|
|
|
296
296
|
class CharSyncSearch:
|
|
@@ -305,9 +305,15 @@ class CharSyncSearch:
|
|
|
305
305
|
:param word_pos:
|
|
306
306
|
"""
|
|
307
307
|
self.bpe = bpe
|
|
308
|
+
self.opts = bpe.opts
|
|
308
309
|
self.word = word
|
|
309
310
|
self.word_pos = word_pos
|
|
310
|
-
self.hyps: List[Hyp] = [
|
|
311
|
+
self.hyps: List[Hyp] = [
|
|
312
|
+
Hyp(
|
|
313
|
+
bpe_sym_history=[],
|
|
314
|
+
cur_node=bpe if self.opts.word_prefix_symbol is None else bpe.arcs[self.opts.word_prefix_symbol],
|
|
315
|
+
)
|
|
316
|
+
]
|
|
311
317
|
self.final_bpe_seqs: Optional[List[List[str]]] = None
|
|
312
318
|
|
|
313
319
|
def _get_finished(self):
|
|
@@ -329,10 +335,17 @@ class CharSyncSearch:
|
|
|
329
335
|
if next_node:
|
|
330
336
|
new_hyps.append(
|
|
331
337
|
Hyp(
|
|
332
|
-
bpe_sym_history=hyp.bpe_sym_history
|
|
338
|
+
bpe_sym_history=hyp.bpe_sym_history
|
|
339
|
+
+ [hyp.cur_node.prefix + self.opts.label_postfix_merge_symbol],
|
|
333
340
|
cur_node=next_node,
|
|
334
341
|
)
|
|
335
342
|
)
|
|
343
|
+
if self.opts.word_prefix_symbol is not None and hyp.cur_node.finished:
|
|
344
|
+
next_node = self.bpe.arcs.get(char)
|
|
345
|
+
if next_node:
|
|
346
|
+
new_hyps.append(
|
|
347
|
+
Hyp(bpe_sym_history=hyp.bpe_sym_history + [hyp.cur_node.prefix], cur_node=next_node)
|
|
348
|
+
)
|
|
336
349
|
next_node = hyp.cur_node.arcs.get(char)
|
|
337
350
|
if next_node:
|
|
338
351
|
new_hyps.append(Hyp(bpe_sym_history=hyp.bpe_sym_history, cur_node=next_node))
|
|
@@ -349,20 +362,15 @@ class CharSyncSearch:
|
|
|
349
362
|
return self.final_bpe_seqs
|
|
350
363
|
|
|
351
364
|
|
|
365
|
+
@dataclass
|
|
352
366
|
class HypInPos:
|
|
353
367
|
"""
|
|
354
368
|
Represents a hypothesis in the search.
|
|
355
369
|
"""
|
|
356
370
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
:param PrefixTree cur_node:
|
|
361
|
-
:param int pos:
|
|
362
|
-
"""
|
|
363
|
-
self.bpe_sym_history = bpe_sym_history
|
|
364
|
-
self.cur_node = cur_node
|
|
365
|
-
self.pos = pos
|
|
371
|
+
bpe_sym_history: List[str]
|
|
372
|
+
cur_node: PrefixTree
|
|
373
|
+
pos: int
|
|
366
374
|
|
|
367
375
|
|
|
368
376
|
class DepthFirstSearch:
|
|
@@ -377,11 +385,18 @@ class DepthFirstSearch:
|
|
|
377
385
|
:param sampler:
|
|
378
386
|
"""
|
|
379
387
|
self.bpe = bpe
|
|
388
|
+
self.opts = bpe.opts
|
|
380
389
|
self.word = word
|
|
381
390
|
self.sampler = sampler
|
|
382
391
|
self.hyps: List[HypInPos] = []
|
|
383
392
|
self.final_bpe_seq: Optional[List[str]] = None
|
|
384
|
-
self._add_hyp(
|
|
393
|
+
self._add_hyp(
|
|
394
|
+
HypInPos(
|
|
395
|
+
bpe_sym_history=[],
|
|
396
|
+
cur_node=bpe if self.opts.word_prefix_symbol is None else bpe.arcs[self.opts.word_prefix_symbol],
|
|
397
|
+
pos=0,
|
|
398
|
+
)
|
|
399
|
+
)
|
|
385
400
|
|
|
386
401
|
def _add_hyp(self, hyp: HypInPos):
|
|
387
402
|
if hyp.pos >= len(self.word):
|
|
@@ -402,16 +417,26 @@ class DepthFirstSearch:
|
|
|
402
417
|
if next_node:
|
|
403
418
|
new_hyps.append(
|
|
404
419
|
HypInPos(
|
|
405
|
-
bpe_sym_history=hyp.bpe_sym_history
|
|
420
|
+
bpe_sym_history=hyp.bpe_sym_history
|
|
421
|
+
+ [hyp.cur_node.prefix + self.opts.label_postfix_merge_symbol],
|
|
406
422
|
cur_node=next_node,
|
|
407
423
|
pos=hyp.pos + 1,
|
|
408
424
|
)
|
|
409
425
|
)
|
|
426
|
+
if self.opts.word_prefix_symbol is not None and hyp.cur_node.finished:
|
|
427
|
+
next_node = self.bpe.arcs.get(char)
|
|
428
|
+
if next_node:
|
|
429
|
+
new_hyps.append(
|
|
430
|
+
HypInPos(
|
|
431
|
+
bpe_sym_history=hyp.bpe_sym_history + [hyp.cur_node.prefix], cur_node=next_node, pos=hyp.pos + 1
|
|
432
|
+
)
|
|
433
|
+
)
|
|
410
434
|
next_node = hyp.cur_node.arcs.get(char)
|
|
411
435
|
if next_node:
|
|
412
436
|
new_hyps.append(HypInPos(bpe_sym_history=hyp.bpe_sym_history, cur_node=next_node, pos=hyp.pos + 1))
|
|
413
437
|
|
|
414
438
|
# Note that the order we check them will make this a depth-first or breadth-first search.
|
|
439
|
+
# We pop(-1) from the hyps list. So the last entry we add here will be the next one we expand.
|
|
415
440
|
if self.sampler and self.sampler():
|
|
416
441
|
new_hyps = list(reversed(new_hyps))
|
|
417
442
|
for hyp in new_hyps:
|
|
@@ -431,13 +456,22 @@ class SamplingBytePairEncoder:
|
|
|
431
456
|
Will randomly sample from any possible BPE split.
|
|
432
457
|
"""
|
|
433
458
|
|
|
434
|
-
def __init__(
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
:
|
|
438
|
-
|
|
439
|
-
:
|
|
440
|
-
:
|
|
459
|
+
def __init__(
|
|
460
|
+
self,
|
|
461
|
+
*,
|
|
462
|
+
labels: List[str],
|
|
463
|
+
breadth_prob: float,
|
|
464
|
+
rnd: numpy.random.RandomState,
|
|
465
|
+
unknown_label: Optional[str] = None,
|
|
466
|
+
opts: BpeOpts,
|
|
467
|
+
):
|
|
468
|
+
"""
|
|
469
|
+
:param labels: vocab
|
|
470
|
+
:param breadth_prob: 1.0 will lead to breadth-first search, 0.0 to depth-first search.
|
|
471
|
+
other values are stochastic.
|
|
472
|
+
:param rnd:
|
|
473
|
+
:param unknown_label:
|
|
474
|
+
:param opts:
|
|
441
475
|
"""
|
|
442
476
|
self.labels = labels
|
|
443
477
|
self.unknown_label = unknown_label
|
|
@@ -445,9 +479,10 @@ class SamplingBytePairEncoder:
|
|
|
445
479
|
assert unknown_label in self.labels
|
|
446
480
|
self.breadth_prob = breadth_prob
|
|
447
481
|
self.rnd = rnd
|
|
482
|
+
self.opts = opts
|
|
448
483
|
|
|
449
484
|
# build prefix tree
|
|
450
|
-
bpe = PrefixTree()
|
|
485
|
+
bpe = PrefixTree(opts=opts)
|
|
451
486
|
for bpe_sym in labels:
|
|
452
487
|
bpe.add(bpe_sym)
|
|
453
488
|
self._bpe_prefix_tree = bpe
|
|
@@ -514,9 +549,10 @@ def _demo():
|
|
|
514
549
|
|
|
515
550
|
vocab = Vocabulary(vocab_file=args.vocab, unknown_label=None)
|
|
516
551
|
rnd = numpy.random.RandomState(args.seed)
|
|
552
|
+
opts = BpeOpts(label_postfix_merge_symbol=BpePostMergeSymbol)
|
|
517
553
|
|
|
518
554
|
if args.input:
|
|
519
|
-
bpe_prefix_tree = PrefixTree()
|
|
555
|
+
bpe_prefix_tree = PrefixTree(opts=opts)
|
|
520
556
|
for bpe_sym in vocab.labels:
|
|
521
557
|
bpe_prefix_tree.add(bpe_sym)
|
|
522
558
|
|
|
@@ -533,7 +569,9 @@ def _demo():
|
|
|
533
569
|
print("%s: %s" % (word, " ".join(greedy)))
|
|
534
570
|
return
|
|
535
571
|
|
|
536
|
-
bpe = SamplingBytePairEncoder(
|
|
572
|
+
bpe = SamplingBytePairEncoder(
|
|
573
|
+
labels=vocab.labels, breadth_prob=args.breadth_prob, rnd=rnd, unknown_label=args.unk, opts=opts
|
|
574
|
+
)
|
|
537
575
|
print("Reading from stdin:")
|
|
538
576
|
while True:
|
|
539
577
|
try:
|