From 5a40d73a5240cd5c1298cbb2aac47a38d06a15a2 Mon Sep 17 00:00:00 2001 From: fanlu Date: Wed, 4 Mar 2020 11:44:46 +0800 Subject: [PATCH 1/7] support load kaldi model in python --- src/pybind/Makefile | 1 + src/pybind/kaldi/io_util.py | 16 +++++++++ src/pybind/nnet3/nnet3_pybind.cc | 2 ++ src/pybind/nnet3/nnet_nnet_pybind.cc | 49 ++++++++++++++++++++++++++++ src/pybind/nnet3/nnet_nnet_pybind.h | 25 ++++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 src/pybind/nnet3/nnet_nnet_pybind.cc create mode 100644 src/pybind/nnet3/nnet_nnet_pybind.h diff --git a/src/pybind/Makefile b/src/pybind/Makefile index 7e3079b7d09..9173c7dc3cc 100644 --- a/src/pybind/Makefile +++ b/src/pybind/Makefile @@ -91,6 +91,7 @@ nnet3/nnet3_pybind.cc \ nnet3/nnet_chain_example_pybind.cc \ nnet3/nnet_common_pybind.cc \ nnet3/nnet_example_pybind.cc \ +nnet3/nnet_nnet_pybind.cc \ tests/test_dlpack_subvector.cc \ util/kaldi_holder_pybind.cc \ util/kaldi_io_pybind.cc \ diff --git a/src/pybind/kaldi/io_util.py b/src/pybind/kaldi/io_util.py index f26229a8661..ed53edcb671 100644 --- a/src/pybind/kaldi/io_util.py +++ b/src/pybind/kaldi/io_util.py @@ -82,3 +82,19 @@ def read_transition_model(rxfilename): ki.Close() return trans_model + + +def read_nnet_model(rxfilename): + '''Read nnet model from an rxfilename. + ''' + ki = kaldi_pybind.Input() + is_opened, is_binary = ki.Open(rxfilename, read_header=True) + if not is_opened: + raise FileNotOpenException('Failed to open {}'.format(rxfilename)) + + nnet = kaldi_pybind.nnet3.Nnet() + nnet.Read(ki.Stream(), is_binary) + + ki.Close() + + return nnet \ No newline at end of file diff --git a/src/pybind/nnet3/nnet3_pybind.cc b/src/pybind/nnet3/nnet3_pybind.cc index c0ccd5979cb..370a9f95b5f 100644 --- a/src/pybind/nnet3/nnet3_pybind.cc +++ b/src/pybind/nnet3/nnet3_pybind.cc @@ -23,6 +23,7 @@ #include "nnet3/nnet_chain_example_pybind.h" #include "nnet3/nnet_common_pybind.h" #include "nnet3/nnet_example_pybind.h" +#include "nnet3/nnet_nnet_pybind.h" void pybind_nnet3(py::module& _m) { py::module m = _m.def_submodule("nnet3", "nnet3 pybind for Kaldi"); @@ -30,4 +31,5 @@ void pybind_nnet3(py::module& _m) { pybind_nnet_common(m); pybind_nnet_example(m); pybind_nnet_chain_example(m); + pybind_nnet_nnet(m); } diff --git a/src/pybind/nnet3/nnet_nnet_pybind.cc b/src/pybind/nnet3/nnet_nnet_pybind.cc new file mode 100644 index 00000000000..d10f2ac4bf7 --- /dev/null +++ b/src/pybind/nnet3/nnet_nnet_pybind.cc @@ -0,0 +1,49 @@ +// pybind/nnet3/nnet_nnet_pybind.cc + +// Copyright 2019 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#include "nnet3/nnet_nnet_pybind.h" + +#include "nnet3/nnet-nnet.h" +#include "nnet3/nnet-component-itf.h" + +using namespace kaldi; +using namespace kaldi::nnet3; + +void pybind_nnet_nnet(py::module& m) { + using PyClass = Nnet; + py::class_( + m, "Nnet", + "This function can be used either to initialize a new Nnet from a config" + "file, or to add to an existing Nnet, possibly replacing certain parts of" + "it. It will die with error if something went wrong." + "Also see the function ReadEditConfig() in nnet-utils.h (it's made a" + "non-member because it doesn't need special access)." + ) + .def(py::init<>()) + .def("Read", &PyClass::Read, py::arg("is"), py::arg("binary")) + .def("GetComponentNames", &PyClass::GetComponentNames, + "returns vector of component names (needed by some parsing code, for instance).", + py::return_value_policy::reference) + .def("GetComponentName", &PyClass::GetComponentName, py::arg("component_index")) + .def("Info", &PyClass::Info) + .def("NumComponents", &PyClass::NumComponents) + .def("NumNodes", &PyClass::NumNodes) + // .def("GetComponent", &PyClass::GetComponent, py::arg("c")) + ; +} diff --git a/src/pybind/nnet3/nnet_nnet_pybind.h b/src/pybind/nnet3/nnet_nnet_pybind.h new file mode 100644 index 00000000000..6dcc45d8417 --- /dev/null +++ b/src/pybind/nnet3/nnet_nnet_pybind.h @@ -0,0 +1,25 @@ +// pybind/nnet3/nnet_nnet_pybind.h + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#ifndef KALDI_PYBIND_NNET3_NNET_NNET_PYBIND_H_ +#define KALDI_PYBIND_NNET3_NNET_NNET_PYBIND_H_ + +#include "pybind/kaldi_pybind.h" + +void pybind_nnet_nnet(py::module& m); + +#endif // KALDI_PYBIND_NNET3_NNET_NNET_PYBIND_H_ From 422d99ef6d869a10379614272adc01173871b664 Mon Sep 17 00:00:00 2001 From: fanlu Date: Thu, 5 Mar 2020 13:30:47 +0800 Subject: [PATCH 2/7] add some component --- src/pybind/nnet3/nnet_nnet_pybind.cc | 103 +++++++++++++++++++++------ 1 file changed, 81 insertions(+), 22 deletions(-) mode change 100644 => 100755 src/pybind/nnet3/nnet_nnet_pybind.cc diff --git a/src/pybind/nnet3/nnet_nnet_pybind.cc b/src/pybind/nnet3/nnet_nnet_pybind.cc old mode 100644 new mode 100755 index d10f2ac4bf7..22247f88f2c --- a/src/pybind/nnet3/nnet_nnet_pybind.cc +++ b/src/pybind/nnet3/nnet_nnet_pybind.cc @@ -1,6 +1,6 @@ // pybind/nnet3/nnet_nnet_pybind.cc -// Copyright 2019 JD AI, Beijing, China (author: Lu Fan) +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) // See ../../../COPYING for clarification regarding multiple authors // @@ -19,31 +19,90 @@ #include "nnet3/nnet_nnet_pybind.h" -#include "nnet3/nnet-nnet.h" #include "nnet3/nnet-component-itf.h" +#include "nnet3/nnet-convolutional-component.h" +#include "nnet3/nnet-nnet.h" +#include "nnet3/nnet-normalize-component.h" +#include "nnet3/nnet-simple-component.h" using namespace kaldi; using namespace kaldi::nnet3; +template +using overload_cast_ = py::detail::overload_cast_impl; + void pybind_nnet_nnet(py::module& m) { - using PyClass = Nnet; - py::class_( - m, "Nnet", - "This function can be used either to initialize a new Nnet from a config" - "file, or to add to an existing Nnet, possibly replacing certain parts of" - "it. It will die with error if something went wrong." - "Also see the function ReadEditConfig() in nnet-utils.h (it's made a" - "non-member because it doesn't need special access)." - ) - .def(py::init<>()) - .def("Read", &PyClass::Read, py::arg("is"), py::arg("binary")) - .def("GetComponentNames", &PyClass::GetComponentNames, - "returns vector of component names (needed by some parsing code, for instance).", - py::return_value_policy::reference) - .def("GetComponentName", &PyClass::GetComponentName, py::arg("component_index")) - .def("Info", &PyClass::Info) - .def("NumComponents", &PyClass::NumComponents) - .def("NumNodes", &PyClass::NumNodes) - // .def("GetComponent", &PyClass::GetComponent, py::arg("c")) - ; + using Comp = kaldi::nnet3::Component; + py::class_(m, "Component", + "Abstract base-class for neural-net components.") + .def("Type", &Comp::Type, + "Returns a string such as \"SigmoidComponent\", describing the " + "type of the object.") + .def("Info", &Comp::Info, + "Returns some text-form information about this component, for " + "diagnostics. Starts with the type of the component. E.g. " + "\"SigmoidComponent dim=900\", although most components will have " + "much more info.") + .def_static("NewComponentOfType", &Comp::NewComponentOfType, + py::return_value_policy::take_ownership); + + using BNC = kaldi::nnet3::BatchNormComponent; + py::class_(m, "BatchNormComponent") + .def("Type", &BNC::Type) + .def("Offset", &BNC::Offset) + .def("Scale", overload_cast_<>()(&BNC::Scale, py::const_)); + + using FAC = kaldi::nnet3::FixedAffineComponent; + py::class_(m, "FixedAffineComponent") + .def("Type", &FAC::Type) + .def("LinearParams", &FAC::LinearParams) + .def("BiasParams", &FAC::BiasParams); + + using LC = kaldi::nnet3::LinearComponent; + py::class_(m, "LinearComponent") + .def("Type", &LC::Type) + .def("Params", overload_cast_<>()(&LC::Params, py::const_)); + + using NGAC = kaldi::nnet3::NaturalGradientAffineComponent; + py::class_(m, "NaturalGradientAffineComponent") + .def("Type", &NGAC::Type) + .def("LinearParams", overload_cast_<>()(&NGAC::LinearParams, py::const_)) + .def("BiasParams", overload_cast_<>()(&NGAC::BiasParams, py::const_)); + + using AC = kaldi::nnet3::AffineComponent; + py::class_(m, "AffineComponent") + .def("Type", &AC::Type) + .def("LinearParams", overload_cast_<>()(&AC::LinearParams, py::const_)) + .def("BiasParams", overload_cast_<>()(&AC::BiasParams, py::const_)); + + using TC = kaldi::nnet3::TdnnComponent; + py::class_(m, "TdnnComponent") + .def("Type", &TC::Type) + .def("LinearParams", &TC::LinearParams) + .def("BiasParams", &TC::BiasParams); + + using PyClass = kaldi::nnet3::Nnet; + auto nnet = py::class_( + m, "Nnet", + "This function can be used either to initialize a new Nnet from a " + "config file, or to add to an existing Nnet, possibly replacing " + "certain parts of it. It will die with error if something went wrong. " + "Also see the function ReadEditConfig() in nnet-utils.h (it's made a " + "non-member because it doesn't need special access)."); + nnet.def(py::init<>()) + .def("Read", &PyClass::Read, py::arg("is"), py::arg("binary")) + .def("GetComponentNames", &PyClass::GetComponentNames, + "returns vector of component names (needed by some parsing code, " + "for instance).", + py::return_value_policy::reference) + .def("GetComponentName", &PyClass::GetComponentName, + py::arg("component_index")) + .def("Info", &PyClass::Info, + "returns some human-readable information about the network, " + "mostly for debugging purposes. Also see function NnetInfo() in " + "nnet-utils.h, which prints out more extensive infoformation.") + .def("NumComponents", &PyClass::NumComponents) + .def("NumNodes", &PyClass::NumNodes) + .def("GetComponent", (Comp * (PyClass::*)(int32)) & PyClass::GetComponent, + py::arg("c"), py::return_value_policy::reference); } From c7e9f4e5cb8d6da19da9909f8dd26fab7881e2d9 Mon Sep 17 00:00:00 2001 From: fanlu Date: Thu, 5 Mar 2020 23:12:44 +0800 Subject: [PATCH 3/7] split one file to multi component wrap files --- src/nnet3/nnet-normalize-component.h | 4 ++ src/pybind/Makefile | 4 ++ src/pybind/cudamatrix/cu_matrix_pybind.cc | 7 ++- src/pybind/dlpack/dlpack_pybind.cc | 2 +- src/pybind/kaldi/io_util.py | 10 ++-- src/pybind/nnet3/nnet3_pybind.cc | 8 +++ src/pybind/nnet3/nnet_component_itf_pybind.cc | 40 +++++++++++++ src/pybind/nnet3/nnet_component_itf_pybind.h | 25 ++++++++ .../nnet_convolutional_component_pybind.cc | 32 ++++++++++ .../nnet_convolutional_component_pybind.h | 25 ++++++++ src/pybind/nnet3/nnet_nnet_pybind.cc | 58 +------------------ src/pybind/nnet3/nnet_nnet_pybind_test.py | 40 +++++++++++++ .../nnet3/nnet_normalize_component_pybind.cc | 35 +++++++++++ .../nnet3/nnet_normalize_component_pybind.h | 25 ++++++++ .../nnet3/nnet_simple_component_pybind.cc | 46 +++++++++++++++ .../nnet3/nnet_simple_component_pybind.h | 25 ++++++++ 16 files changed, 321 insertions(+), 65 deletions(-) mode change 100644 => 100755 src/pybind/Makefile mode change 100644 => 100755 src/pybind/kaldi/io_util.py mode change 100644 => 100755 src/pybind/nnet3/nnet3_pybind.cc create mode 100755 src/pybind/nnet3/nnet_component_itf_pybind.cc create mode 100755 src/pybind/nnet3/nnet_component_itf_pybind.h create mode 100755 src/pybind/nnet3/nnet_convolutional_component_pybind.cc create mode 100755 src/pybind/nnet3/nnet_convolutional_component_pybind.h create mode 100644 src/pybind/nnet3/nnet_nnet_pybind_test.py create mode 100755 src/pybind/nnet3/nnet_normalize_component_pybind.cc create mode 100755 src/pybind/nnet3/nnet_normalize_component_pybind.h create mode 100755 src/pybind/nnet3/nnet_simple_component_pybind.cc create mode 100755 src/pybind/nnet3/nnet_simple_component_pybind.h diff --git a/src/nnet3/nnet-normalize-component.h b/src/nnet3/nnet-normalize-component.h index 37ad624d0f0..24336946545 100644 --- a/src/nnet3/nnet-normalize-component.h +++ b/src/nnet3/nnet-normalize-component.h @@ -224,6 +224,10 @@ class BatchNormComponent: public Component { const CuVector &Offset() const { return offset_; } const CuVector &Scale() const { return scale_; } + virtual const CuVector &StatsSum() const { return stats_sum_; } + virtual const CuVector &StatsSumsq() const { return stats_sumsq_; } + virtual const double &Count() const { return count_; } + private: struct Memo { diff --git a/src/pybind/Makefile b/src/pybind/Makefile old mode 100644 new mode 100755 index 9173c7dc3cc..a1e8252c982 --- a/src/pybind/Makefile +++ b/src/pybind/Makefile @@ -90,8 +90,12 @@ matrix/sparse_matrix_pybind.cc \ nnet3/nnet3_pybind.cc \ nnet3/nnet_chain_example_pybind.cc \ nnet3/nnet_common_pybind.cc \ +nnet3/nnet_component_itf_pybind.cc \ +nnet3/nnet_convolutional_component_pybind.cc \ nnet3/nnet_example_pybind.cc \ nnet3/nnet_nnet_pybind.cc \ +nnet3/nnet_normalize_component_pybind.cc \ +nnet3/nnet_simple_component_pybind.cc \ tests/test_dlpack_subvector.cc \ util/kaldi_holder_pybind.cc \ util/kaldi_io_pybind.cc \ diff --git a/src/pybind/cudamatrix/cu_matrix_pybind.cc b/src/pybind/cudamatrix/cu_matrix_pybind.cc index 2dfaed6bfd2..9c947c300c1 100644 --- a/src/pybind/cudamatrix/cu_matrix_pybind.cc +++ b/src/pybind/cudamatrix/cu_matrix_pybind.cc @@ -38,6 +38,8 @@ void pybind_cu_matrix(py::module& m) { .def("Set", &PyClass::Set, py::arg("value")) .def("Add", &PyClass::Add, py::arg("value")) .def("Scale", &PyClass::Scale, py::arg("value")) + .def("to_dlpack", + [](py::object obj) { return CuMatrixToDLPack(&obj); }) .def("__getitem__", [](const PyClass& m, std::pair i) { return m(i.first, i.second); @@ -55,8 +57,9 @@ void pybind_cu_matrix(py::module& m) { py::arg("MatrixStrideType") = kDefaultStride) .def(py::init&, MatrixTransposeType>(), py::arg("other"), py::arg("trans") = kNoTrans) - .def("to_dlpack", - [](py::object obj) { return CuMatrixToDLPack(&obj); }); + // .def("to_dlpack", + // [](py::object obj) { return CuMatrixToDLPack(&obj); }) + ; } { using PyClass = CuSubMatrix; diff --git a/src/pybind/dlpack/dlpack_pybind.cc b/src/pybind/dlpack/dlpack_pybind.cc index 4d5c4c1ad89..58bc9d0e7dd 100644 --- a/src/pybind/dlpack/dlpack_pybind.cc +++ b/src/pybind/dlpack/dlpack_pybind.cc @@ -236,7 +236,7 @@ py::capsule CuVectorToDLPack(py::object* obj) { } py::capsule CuMatrixToDLPack(py::object* obj) { - auto* m = obj->cast*>(); + auto* m = obj->cast*>(); #if HAVE_CUDA == 1 KALDI_ASSERT(CuDevice::Instantiate().Enabled()); diff --git a/src/pybind/kaldi/io_util.py b/src/pybind/kaldi/io_util.py old mode 100644 new mode 100755 index ed53edcb671..8f7a6101a0c --- a/src/pybind/kaldi/io_util.py +++ b/src/pybind/kaldi/io_util.py @@ -84,17 +84,17 @@ def read_transition_model(rxfilename): return trans_model -def read_nnet_model(rxfilename): - '''Read nnet model from an rxfilename. +def read_nnet3_model(filename): + '''Read nnet model from an filename. ''' ki = kaldi_pybind.Input() - is_opened, is_binary = ki.Open(rxfilename, read_header=True) + is_opened, is_binary = ki.Open(filename, read_header=True) if not is_opened: - raise FileNotOpenException('Failed to open {}'.format(rxfilename)) + raise FileNotOpenException('Failed to open {}'.format(filename)) nnet = kaldi_pybind.nnet3.Nnet() nnet.Read(ki.Stream(), is_binary) ki.Close() - return nnet \ No newline at end of file + return nnet diff --git a/src/pybind/nnet3/nnet3_pybind.cc b/src/pybind/nnet3/nnet3_pybind.cc old mode 100644 new mode 100755 index 370a9f95b5f..37e1dbc4fc0 --- a/src/pybind/nnet3/nnet3_pybind.cc +++ b/src/pybind/nnet3/nnet3_pybind.cc @@ -22,14 +22,22 @@ #include "nnet3/nnet_chain_example_pybind.h" #include "nnet3/nnet_common_pybind.h" +#include "nnet3/nnet_component_itf_pybind.h" +#include "nnet3/nnet_convolutional_component_pybind.h" #include "nnet3/nnet_example_pybind.h" #include "nnet3/nnet_nnet_pybind.h" +#include "nnet3/nnet_normalize_component_pybind.h" +#include "nnet3/nnet_simple_component_pybind.h" void pybind_nnet3(py::module& _m) { py::module m = _m.def_submodule("nnet3", "nnet3 pybind for Kaldi"); pybind_nnet_common(m); + pybind_nnet_component_itf(m); + pybind_nnet_convolutional_component(m); pybind_nnet_example(m); pybind_nnet_chain_example(m); pybind_nnet_nnet(m); + pybind_nnet_normalize_component(m); + pybind_nnet_simple_component(m); } diff --git a/src/pybind/nnet3/nnet_component_itf_pybind.cc b/src/pybind/nnet3/nnet_component_itf_pybind.cc new file mode 100755 index 00000000000..66011d3af26 --- /dev/null +++ b/src/pybind/nnet3/nnet_component_itf_pybind.cc @@ -0,0 +1,40 @@ +// pybind/nnet3/nnet_component_itf_pybind.cc + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#include "nnet3/nnet_component_itf_pybind.h" + +#include "nnet3/nnet-component-itf.h" + +using namespace kaldi::nnet3; + +void pybind_nnet_component_itf(py::module& m) { + using PyClass = Component; + py::class_(m, "Component", + "Abstract base-class for neural-net components.") + .def("Type", &PyClass::Type, + "Returns a string such as \"SigmoidComponent\", describing the " + "type of the object.") + .def("Info", &PyClass::Info, + "Returns some text-form information about this component, for " + "diagnostics. Starts with the type of the component. E.g. " + "\"SigmoidComponent dim=900\", although most components will have " + "much more info.") + .def_static("NewComponentOfType", &PyClass::NewComponentOfType, + py::return_value_policy::take_ownership); +} diff --git a/src/pybind/nnet3/nnet_component_itf_pybind.h b/src/pybind/nnet3/nnet_component_itf_pybind.h new file mode 100755 index 00000000000..662d372ae37 --- /dev/null +++ b/src/pybind/nnet3/nnet_component_itf_pybind.h @@ -0,0 +1,25 @@ +// pybind/nnet3/nnet_component_itf_pybind.h + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#ifndef KALDI_PYBIND_NNET3_NNET_COMPONENT_ITF_PYBIND_H_ +#define KALDI_PYBIND_NNET3_NNET_COMPONENT_ITF_PYBIND_H_ + +#include "pybind/kaldi_pybind.h" + +void pybind_nnet_component_itf(py::module& m); + +#endif // KALDI_PYBIND_NNET3_NNET_COMPONENT_ITF_PYBIND_H_ diff --git a/src/pybind/nnet3/nnet_convolutional_component_pybind.cc b/src/pybind/nnet3/nnet_convolutional_component_pybind.cc new file mode 100755 index 00000000000..1781f1084af --- /dev/null +++ b/src/pybind/nnet3/nnet_convolutional_component_pybind.cc @@ -0,0 +1,32 @@ +// pybind/nnet3/nnet_convolutional_component_pybind.cc + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#include "nnet3/nnet_convolutional_component_pybind.h" + +#include "nnet3/nnet-convolutional-component.h" + +using namespace kaldi::nnet3; + +void pybind_nnet_convolutional_component(py::module& m) { + using TC = kaldi::nnet3::TdnnComponent; + py::class_(m, "TdnnComponent") + .def("Type", &TC::Type) + .def("LinearParams", &TC::LinearParams, py::return_value_policy::reference) + .def("BiasParams", &TC::BiasParams, py::return_value_policy::reference); +} diff --git a/src/pybind/nnet3/nnet_convolutional_component_pybind.h b/src/pybind/nnet3/nnet_convolutional_component_pybind.h new file mode 100755 index 00000000000..8903884ad2d --- /dev/null +++ b/src/pybind/nnet3/nnet_convolutional_component_pybind.h @@ -0,0 +1,25 @@ +// pybind/nnet3/nnet_convolutional_component_pybind.h + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#ifndef KALDI_PYBIND_NNET3_NNET_CONVOLUTIONAL_COMPONENT_PYBIND_H_ +#define KALDI_PYBIND_NNET3_NNET_CONVOLUTIONAL_COMPONENT_PYBIND_H_ + +#include "pybind/kaldi_pybind.h" + +void pybind_nnet_convolutional_component(py::module& m); + +#endif // KALDI_PYBIND_NNET3_NNET_CONVOLUTIONAL_COMPONENT_PYBIND_H_ diff --git a/src/pybind/nnet3/nnet_nnet_pybind.cc b/src/pybind/nnet3/nnet_nnet_pybind.cc index 22247f88f2c..8995d0cb100 100755 --- a/src/pybind/nnet3/nnet_nnet_pybind.cc +++ b/src/pybind/nnet3/nnet_nnet_pybind.cc @@ -19,68 +19,12 @@ #include "nnet3/nnet_nnet_pybind.h" -#include "nnet3/nnet-component-itf.h" -#include "nnet3/nnet-convolutional-component.h" #include "nnet3/nnet-nnet.h" -#include "nnet3/nnet-normalize-component.h" -#include "nnet3/nnet-simple-component.h" using namespace kaldi; using namespace kaldi::nnet3; -template -using overload_cast_ = py::detail::overload_cast_impl; - void pybind_nnet_nnet(py::module& m) { - using Comp = kaldi::nnet3::Component; - py::class_(m, "Component", - "Abstract base-class for neural-net components.") - .def("Type", &Comp::Type, - "Returns a string such as \"SigmoidComponent\", describing the " - "type of the object.") - .def("Info", &Comp::Info, - "Returns some text-form information about this component, for " - "diagnostics. Starts with the type of the component. E.g. " - "\"SigmoidComponent dim=900\", although most components will have " - "much more info.") - .def_static("NewComponentOfType", &Comp::NewComponentOfType, - py::return_value_policy::take_ownership); - - using BNC = kaldi::nnet3::BatchNormComponent; - py::class_(m, "BatchNormComponent") - .def("Type", &BNC::Type) - .def("Offset", &BNC::Offset) - .def("Scale", overload_cast_<>()(&BNC::Scale, py::const_)); - - using FAC = kaldi::nnet3::FixedAffineComponent; - py::class_(m, "FixedAffineComponent") - .def("Type", &FAC::Type) - .def("LinearParams", &FAC::LinearParams) - .def("BiasParams", &FAC::BiasParams); - - using LC = kaldi::nnet3::LinearComponent; - py::class_(m, "LinearComponent") - .def("Type", &LC::Type) - .def("Params", overload_cast_<>()(&LC::Params, py::const_)); - - using NGAC = kaldi::nnet3::NaturalGradientAffineComponent; - py::class_(m, "NaturalGradientAffineComponent") - .def("Type", &NGAC::Type) - .def("LinearParams", overload_cast_<>()(&NGAC::LinearParams, py::const_)) - .def("BiasParams", overload_cast_<>()(&NGAC::BiasParams, py::const_)); - - using AC = kaldi::nnet3::AffineComponent; - py::class_(m, "AffineComponent") - .def("Type", &AC::Type) - .def("LinearParams", overload_cast_<>()(&AC::LinearParams, py::const_)) - .def("BiasParams", overload_cast_<>()(&AC::BiasParams, py::const_)); - - using TC = kaldi::nnet3::TdnnComponent; - py::class_(m, "TdnnComponent") - .def("Type", &TC::Type) - .def("LinearParams", &TC::LinearParams) - .def("BiasParams", &TC::BiasParams); - using PyClass = kaldi::nnet3::Nnet; auto nnet = py::class_( m, "Nnet", @@ -103,6 +47,6 @@ void pybind_nnet_nnet(py::module& m) { "nnet-utils.h, which prints out more extensive infoformation.") .def("NumComponents", &PyClass::NumComponents) .def("NumNodes", &PyClass::NumNodes) - .def("GetComponent", (Comp * (PyClass::*)(int32)) & PyClass::GetComponent, + .def("GetComponent", (Component * (PyClass::*)(int32)) & PyClass::GetComponent, py::arg("c"), py::return_value_policy::reference); } diff --git a/src/pybind/nnet3/nnet_nnet_pybind_test.py b/src/pybind/nnet3/nnet_nnet_pybind_test.py new file mode 100644 index 00000000000..0b11c4ba95f --- /dev/null +++ b/src/pybind/nnet3/nnet_nnet_pybind_test.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +# Copyright 2020 JD AI, Beijing, China (author: Lu Fan) +# Apache 2.0 + +import os +import sys +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) + +import unittest + +import kaldi +from kaldi import read_nnet3_model +from torch.utils.dlpack import from_dlpack +from torch.utils.dlpack import to_dlpack + +class TestNnetNnet(unittest.TestCase): + + def test_nnet_nnet(self): + kaldi.SelectGpuId('yes') + final_mdl = "/mnt/cfs1_alias1/asr/users/fanlu/task/kaldi_recipe/pybind/s10.1/exp/chain_cleaned_1c/tdnn1c_sp/final.mdl" + nnet = kaldi.read_nnet3_model(final_mdl) + for i in range(nnet.NumComponents()): + component = nnet.GetComponent(i) + comp_type = component.Type() + if "Affine" in comp_type or "TdnnComponent" in comp_type: + linear_params = from_dlpack(component.LinearParams().to_dlpack()) + bias_params = from_dlpack(component.BiasParams().to_dlpack()) + print(linear_params.shape) + elif "Batch" in comp_type: + # stats_sum = from_dlpack(component.StatsSum().to_dlpack()) + # stats_sumsq = from_dlpack(component.StatsSumsq().to_dlpack()) + # print(stats_sum.shape) + pass + elif "LinearComponent" == comp_type: + linear_params = from_dlpack(component.LinearParams().to_dlpack()) + print(linear_params.shape) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/src/pybind/nnet3/nnet_normalize_component_pybind.cc b/src/pybind/nnet3/nnet_normalize_component_pybind.cc new file mode 100755 index 00000000000..69871a322f1 --- /dev/null +++ b/src/pybind/nnet3/nnet_normalize_component_pybind.cc @@ -0,0 +1,35 @@ +// pybind/nnet3/nnet_normalize_component_pybind.cc + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#include "nnet3/nnet_normalize_component_pybind.h" + +#include "nnet3/nnet-normalize-component.h" + +using namespace kaldi::nnet3; + +void pybind_nnet_normalize_component(py::module& m) { + using PyClass = kaldi::nnet3::BatchNormComponent; + py::class_(m, "BatchNormComponent") + .def("Type", &PyClass::Type) + .def("StatsSum", &PyClass::StatsSum) + .def("StatsSumsq", &PyClass::StatsSumsq) + .def("Count", &PyClass::Count) + .def("Offset", &PyClass::Offset) + .def("Scale", overload_cast_<>()(&PyClass::Scale, py::const_)); +} diff --git a/src/pybind/nnet3/nnet_normalize_component_pybind.h b/src/pybind/nnet3/nnet_normalize_component_pybind.h new file mode 100755 index 00000000000..85963bc5f72 --- /dev/null +++ b/src/pybind/nnet3/nnet_normalize_component_pybind.h @@ -0,0 +1,25 @@ +// pybind/nnet3/nnet_normalize_component_pybind.h + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#ifndef KALDI_PYBIND_NNET3_NNET_NORNALIZE_COMPONENT_PYBIND_H_ +#define KALDI_PYBIND_NNET3_NNET_NORNALIZE_COMPONENT_PYBIND_H_ + +#include "pybind/kaldi_pybind.h" + +void pybind_nnet_normalize_component(py::module& m); + +#endif // KALDI_PYBIND_NNET3_NNET_NORNALIZE_COMPONENT_PYBIND_H_ diff --git a/src/pybind/nnet3/nnet_simple_component_pybind.cc b/src/pybind/nnet3/nnet_simple_component_pybind.cc new file mode 100755 index 00000000000..eaac5bdc03f --- /dev/null +++ b/src/pybind/nnet3/nnet_simple_component_pybind.cc @@ -0,0 +1,46 @@ +// pybind/nnet3/nnet_simple_component_pybind.cc + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#include "nnet3/nnet_simple_component_pybind.h" + +#include "nnet3/nnet-simple-component.h" + +using namespace kaldi::nnet3; + +void pybind_nnet_simple_component(py::module& m) { + using FAC = FixedAffineComponent; + py::class_(m, "FixedAffineComponent") + .def("Type", &FAC::Type) + .def("LinearParams", &FAC::LinearParams) + .def("BiasParams", &FAC::BiasParams); + + using LC = LinearComponent; + py::class_(m, "LinearComponent") + .def("Type", &LC::Type) + .def("Params", overload_cast_<>()(&LC::Params, py::const_), py::return_value_policy::reference); + + using AC = AffineComponent; + py::class_(m, "AffineComponent") + .def("Type", &AC::Type) + .def("LinearParams", overload_cast_<>()(&AC::LinearParams, py::const_)) + .def("BiasParams", overload_cast_<>()(&AC::BiasParams, py::const_)); + + using NGAC = NaturalGradientAffineComponent; + py::class_(m, "NaturalGradientAffineComponent"); +} diff --git a/src/pybind/nnet3/nnet_simple_component_pybind.h b/src/pybind/nnet3/nnet_simple_component_pybind.h new file mode 100755 index 00000000000..e11e4ed4c10 --- /dev/null +++ b/src/pybind/nnet3/nnet_simple_component_pybind.h @@ -0,0 +1,25 @@ +// pybind/nnet3/nnet_simple_component_pybind.h + +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) + +// See ../../../COPYING for clarification regarding multiple authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +// MERCHANTABLITY OR NON-INFRINGEMENT. +// See the Apache 2 License for the specific language governing permissions and +// limitations under the License. + +#ifndef KALDI_PYBIND_NNET3_NNET_SIMPLE_COMPONENT_PYBIND_H_ +#define KALDI_PYBIND_NNET3_NNET_SIMPLE_COMPONENT_PYBIND_H_ + +#include "pybind/kaldi_pybind.h" + +void pybind_nnet_simple_component(py::module& m); + +#endif // KALDI_PYBIND_NNET3_NNET_SIMPLE_COMPONENT_PYBIND_H_ From 6af774b9c86a9701109e0ae6c46f7977225068f2 Mon Sep 17 00:00:00 2001 From: fanlu Date: Fri, 6 Mar 2020 13:43:20 +0800 Subject: [PATCH 4/7] fix some bugs and add test mdl --- src/nnet3/nnet-convolutional-component.h | 2 + src/nnet3/nnet-normalize-component.h | 7 +- src/nnet3/nnet-simple-component.h | 1 + src/pybind/cudamatrix/cu_matrix_pybind.cc | 6 +- src/pybind/dlpack/dlpack_pybind.cc | 2 +- src/pybind/kaldi/io_util.py | 8 +- src/pybind/nnet3/final.mdl | Bin 0 -> 329878 bytes src/pybind/nnet3/nnet3_pybind.cc | 1 + .../nnet_convolutional_component_pybind.cc | 9 +- src/pybind/nnet3/nnet_nnet_pybind_test.py | 155 +++++++++++++++--- .../nnet3/nnet_normalize_component_pybind.cc | 13 +- .../nnet3/nnet_normalize_component_pybind.h | 6 +- .../nnet3/nnet_simple_component_pybind.cc | 23 +-- 13 files changed, 178 insertions(+), 55 deletions(-) create mode 100644 src/pybind/nnet3/final.mdl diff --git a/src/nnet3/nnet-convolutional-component.h b/src/nnet3/nnet-convolutional-component.h index 279cec321dd..bdb8daf75bb 100644 --- a/src/nnet3/nnet-convolutional-component.h +++ b/src/nnet3/nnet-convolutional-component.h @@ -553,6 +553,8 @@ class TdnnComponent: public UpdatableComponent { CuMatrixBase &LinearParams() { return linear_params_; } + const CuMatrix &Linearparams() const { return linear_params_; } + // This allows you to resize the vector in order to add a bias where // there previously was none-- obviously this should be done carefully. CuVector &BiasParams() { return bias_params_; } diff --git a/src/nnet3/nnet-normalize-component.h b/src/nnet3/nnet-normalize-component.h index 24336946545..f5b89295e3b 100644 --- a/src/nnet3/nnet-normalize-component.h +++ b/src/nnet3/nnet-normalize-component.h @@ -224,9 +224,10 @@ class BatchNormComponent: public Component { const CuVector &Offset() const { return offset_; } const CuVector &Scale() const { return scale_; } - virtual const CuVector &StatsSum() const { return stats_sum_; } - virtual const CuVector &StatsSumsq() const { return stats_sumsq_; } - virtual const double &Count() const { return count_; } + CuVector &StatsSum() { return stats_sum_; } + CuVector &StatsSumsq() { return stats_sumsq_; } + double Count() { return count_; } + BaseFloat Eps() { return epsilon_; } private: diff --git a/src/nnet3/nnet-simple-component.h b/src/nnet3/nnet-simple-component.h index 546176f71ee..12514298961 100644 --- a/src/nnet3/nnet-simple-component.h +++ b/src/nnet3/nnet-simple-component.h @@ -971,6 +971,7 @@ class LinearComponent: public UpdatableComponent { BaseFloat OrthonormalConstraint() const { return orthonormal_constraint_; } CuMatrixBase &Params() { return params_; } const CuMatrixBase &Params() const { return params_; } + const CuMatrix &Params2() const { return params_; } private: // disallow assignment operator. diff --git a/src/pybind/cudamatrix/cu_matrix_pybind.cc b/src/pybind/cudamatrix/cu_matrix_pybind.cc index 9c947c300c1..d15bd772f09 100644 --- a/src/pybind/cudamatrix/cu_matrix_pybind.cc +++ b/src/pybind/cudamatrix/cu_matrix_pybind.cc @@ -38,8 +38,6 @@ void pybind_cu_matrix(py::module& m) { .def("Set", &PyClass::Set, py::arg("value")) .def("Add", &PyClass::Add, py::arg("value")) .def("Scale", &PyClass::Scale, py::arg("value")) - .def("to_dlpack", - [](py::object obj) { return CuMatrixToDLPack(&obj); }) .def("__getitem__", [](const PyClass& m, std::pair i) { return m(i.first, i.second); @@ -57,8 +55,8 @@ void pybind_cu_matrix(py::module& m) { py::arg("MatrixStrideType") = kDefaultStride) .def(py::init&, MatrixTransposeType>(), py::arg("other"), py::arg("trans") = kNoTrans) - // .def("to_dlpack", - // [](py::object obj) { return CuMatrixToDLPack(&obj); }) + .def("to_dlpack", + [](py::object obj) { return CuMatrixToDLPack(&obj); }) ; } { diff --git a/src/pybind/dlpack/dlpack_pybind.cc b/src/pybind/dlpack/dlpack_pybind.cc index 58bc9d0e7dd..4d5c4c1ad89 100644 --- a/src/pybind/dlpack/dlpack_pybind.cc +++ b/src/pybind/dlpack/dlpack_pybind.cc @@ -236,7 +236,7 @@ py::capsule CuVectorToDLPack(py::object* obj) { } py::capsule CuMatrixToDLPack(py::object* obj) { - auto* m = obj->cast*>(); + auto* m = obj->cast*>(); #if HAVE_CUDA == 1 KALDI_ASSERT(CuDevice::Instantiate().Enabled()); diff --git a/src/pybind/kaldi/io_util.py b/src/pybind/kaldi/io_util.py index 8f7a6101a0c..158fbf19d26 100755 --- a/src/pybind/kaldi/io_util.py +++ b/src/pybind/kaldi/io_util.py @@ -84,13 +84,13 @@ def read_transition_model(rxfilename): return trans_model -def read_nnet3_model(filename): - '''Read nnet model from an filename. +def read_nnet3_model(rxfilename): + '''Read nnet model from an rxfilename. ''' ki = kaldi_pybind.Input() - is_opened, is_binary = ki.Open(filename, read_header=True) + is_opened, is_binary = ki.Open(rxfilename, read_header=True) if not is_opened: - raise FileNotOpenException('Failed to open {}'.format(filename)) + raise FileNotOpenException('Failed to open {}'.format(rxfilename)) nnet = kaldi_pybind.nnet3.Nnet() nnet.Read(ki.Stream(), is_binary) diff --git a/src/pybind/nnet3/final.mdl b/src/pybind/nnet3/final.mdl new file mode 100644 index 0000000000000000000000000000000000000000..8b5613d7fa2a65f6a5c3ff50243dc234cb6b7f08 GIT binary patch literal 329878 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[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%0Dvx*$ljzcaxW0n#-PVD*(LFz?$bCBpa^HflsMk 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

B(Nj`t-s!5+^N?kFl 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 literal 0 HcmV?d00001 diff --git a/src/pybind/nnet3/nnet3_pybind.cc b/src/pybind/nnet3/nnet3_pybind.cc index 37e1dbc4fc0..3397ee87144 100755 --- a/src/pybind/nnet3/nnet3_pybind.cc +++ b/src/pybind/nnet3/nnet3_pybind.cc @@ -2,6 +2,7 @@ // Copyright 2019 Mobvoi AI Lab, Beijing, China // (author: Fangjun Kuang, Yaguang Hu, Jian Wang) +// Copyright 2020 JD AI, Beijing, China (author: Lu Fan) // See ../../../COPYING for clarification regarding multiple authors // diff --git a/src/pybind/nnet3/nnet_convolutional_component_pybind.cc b/src/pybind/nnet3/nnet_convolutional_component_pybind.cc index 1781f1084af..560c98257f6 100755 --- a/src/pybind/nnet3/nnet_convolutional_component_pybind.cc +++ b/src/pybind/nnet3/nnet_convolutional_component_pybind.cc @@ -25,8 +25,9 @@ using namespace kaldi::nnet3; void pybind_nnet_convolutional_component(py::module& m) { using TC = kaldi::nnet3::TdnnComponent; - py::class_(m, "TdnnComponent") - .def("Type", &TC::Type) - .def("LinearParams", &TC::LinearParams, py::return_value_policy::reference) - .def("BiasParams", &TC::BiasParams, py::return_value_policy::reference); + py::class_(m, "TdnnComponent") + .def("LinearParams", &TC::Linearparams, + py::return_value_policy::reference) + .def("BiasParams", &TC::BiasParams, + py::return_value_policy::reference); } diff --git a/src/pybind/nnet3/nnet_nnet_pybind_test.py b/src/pybind/nnet3/nnet_nnet_pybind_test.py index 0b11c4ba95f..8a90be163f3 100644 --- a/src/pybind/nnet3/nnet_nnet_pybind_test.py +++ b/src/pybind/nnet3/nnet_nnet_pybind_test.py @@ -3,38 +3,155 @@ # Copyright 2020 JD AI, Beijing, China (author: Lu Fan) # Apache 2.0 +import kaldi +import unittest +from torch.utils.dlpack import to_dlpack +from torch.utils.dlpack import from_dlpack import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) -import unittest +try: + import torch +except ImportError: + print('This test needs PyTorch.') + print('Please install PyTorch first.') + print('PyTorch 1.3.0dev20191006 has been tested and is known to work.') + sys.exit(0) + + +""" +input dim=40 name=input + +# please note that it is important to have input layer with the name=input +# as the layer immediately preceding the fixed-affine-layer to enable +# the use of short notation for the descriptor +fixed-affine-layer name=lda input=Append(-1,0,1) affine-transform-file=$dir/configs/lda.mat + +# the first splicing is moved before the lda layer, so no splicing here +relu-batchnorm-dropout-layer name=tdnn1 $affine_opts dim=16 +tdnnf-layer name=tdnnf2 $tdnnf_opts dim=16 bottleneck-dim=2 time-stride=1 +linear-component name=prefinal-l dim=4 $linear_opts + +prefinal-layer name=prefinal-chain input=prefinal-l $prefinal_opts big-dim=16 small-dim=4 +output-layer name=output include-log-softmax=false dim=$num_targets $output_opts + +prefinal-layer name=prefinal-xent input=prefinal-l $prefinal_opts big-dim=16 small-dim=4 +output-layer name=output-xent dim=$num_targets learning-rate-factor=$learning_rate_factor $output_opts +""" -import kaldi -from kaldi import read_nnet3_model -from torch.utils.dlpack import from_dlpack -from torch.utils.dlpack import to_dlpack class TestNnetNnet(unittest.TestCase): def test_nnet_nnet(self): - kaldi.SelectGpuId('yes') - final_mdl = "/mnt/cfs1_alias1/asr/users/fanlu/task/kaldi_recipe/pybind/s10.1/exp/chain_cleaned_1c/tdnn1c_sp/final.mdl" + if torch.cuda.is_available() == False: + print('No GPU detected! Skip it') + return + + if kaldi.CudaCompiled() == False: + print('Kaldi is not compiled with CUDA! Skip it') + return + + device_id = 0 + + # Kaldi and PyTorch will use the same GPU + kaldi.SelectGpuDevice(device_id=device_id) + kaldi.CuDeviceAllowMultithreading() + + final_mdl = 'src/pybind/nnet3/final.mdl' nnet = kaldi.read_nnet3_model(final_mdl) for i in range(nnet.NumComponents()): component = nnet.GetComponent(i) comp_type = component.Type() - if "Affine" in comp_type or "TdnnComponent" in comp_type: - linear_params = from_dlpack(component.LinearParams().to_dlpack()) + if comp_type in ['RectifiedLinearComponent', 'GeneralDropoutComponent', + 'NoOpComponent']: + continue + comp_name = nnet.GetComponentName(i) + if comp_name == 'lda': + self.assertEqual(comp_type, 'FixedAffineComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) + bias_params = from_dlpack(component.BiasParams().to_dlpack()) + self.assertEqual(linear_params.shape, (120, 120)) + self.assertEqual(bias_params.shape, (120,)) + elif comp_name == 'tdnn1.affine': + self.assertEqual(comp_type, 'NaturalGradientAffineComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) + bias_params = from_dlpack(component.BiasParams().to_dlpack()) + self.assertEqual(linear_params.shape, (16, 120)) + self.assertEqual(bias_params.shape, (16,)) + elif comp_name == 'tdnn1.batchnorm': + self.assertEqual(comp_type, 'BatchNormComponent') + # TODO BN get mean and var + elif comp_name == 'tdnnf2.linear': + self.assertEqual(comp_type, 'TdnnComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) + self.assertEqual(linear_params.shape, (2, 32)) + elif comp_name == 'tdnnf2.affine': + self.assertEqual(comp_type, 'TdnnComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) + bias_params = from_dlpack(component.BiasParams().to_dlpack()) + self.assertEqual(linear_params.shape, (16, 4)) + self.assertEqual(bias_params.shape, (16,)) + elif comp_name == 'tdnnf2.batchnorm': + self.assertEqual(comp_type, 'BatchNormComponent') + # TODO BN get mean and var + elif comp_name == 'prefinal-l': + self.assertEqual(comp_type, 'LinearComponent') + params = from_dlpack(component.Params().to_dlpack()) + self.assertEqual(params.shape, (4, 16)) + elif comp_name == 'prefinal-chain.affine': + self.assertEqual(comp_type, 'NaturalGradientAffineComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) + bias_params = from_dlpack(component.BiasParams().to_dlpack()) + self.assertEqual(linear_params.shape, (16, 4)) + self.assertEqual(bias_params.shape, (16,)) + elif comp_name == 'prefinal-chain.batchnorm1': + self.assertEqual(comp_type, 'BatchNormComponent') + # TODO BN get mean and var + elif comp_name == 'prefinal-chain.linear': + self.assertEqual(comp_type, 'LinearComponent') + params = from_dlpack(component.Params().to_dlpack()) + self.assertEqual(linear_params.shape, (16, 4)) + elif comp_name == 'prefinal-chain.batchnorm2': + self.assertEqual(comp_type, 'BatchNormComponent') + # TODO BN get mean and var + elif comp_name == 'output.affine': + self.assertEqual(comp_type, 'NaturalGradientAffineComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) + bias_params = from_dlpack(component.BiasParams().to_dlpack()) + self.assertEqual(linear_params.shape, (3448, 4)) + self.assertEqual(bias_params.shape, (3448,)) + elif comp_name == 'prefinal-xent.affine': + self.assertEqual(comp_type, 'NaturalGradientAffineComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) + bias_params = from_dlpack(component.BiasParams().to_dlpack()) + self.assertEqual(linear_params.shape, (16, 4)) + self.assertEqual(bias_params.shape, (16,)) + elif comp_name == 'prefinal-xent.batchnorm1': + self.assertEqual(comp_type, 'BatchNormComponent') + # TODO BN get mean and var + elif comp_name == 'prefinal-xent.linear': + self.assertEqual(comp_type, 'LinearComponent') + params = from_dlpack(component.Params().to_dlpack()) + self.assertEqual(linear_params.shape, (16, 4)) + elif comp_name == 'prefinal-xent.batchnorm2': + self.assertEqual(comp_type, 'BatchNormComponent') + # TODO BN get mean and var + elif comp_name == 'output-xent.affine': + self.assertEqual(comp_type, 'NaturalGradientAffineComponent') + linear_params = from_dlpack( + component.LinearParams().to_dlpack()) bias_params = from_dlpack(component.BiasParams().to_dlpack()) - print(linear_params.shape) - elif "Batch" in comp_type: - # stats_sum = from_dlpack(component.StatsSum().to_dlpack()) - # stats_sumsq = from_dlpack(component.StatsSumsq().to_dlpack()) - # print(stats_sum.shape) - pass - elif "LinearComponent" == comp_type: - linear_params = from_dlpack(component.LinearParams().to_dlpack()) - print(linear_params.shape) + self.assertEqual(linear_params.shape, (3448, 4)) + self.assertEqual(bias_params.shape, (3448,)) + if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main() diff --git a/src/pybind/nnet3/nnet_normalize_component_pybind.cc b/src/pybind/nnet3/nnet_normalize_component_pybind.cc index 69871a322f1..b86125f76de 100755 --- a/src/pybind/nnet3/nnet_normalize_component_pybind.cc +++ b/src/pybind/nnet3/nnet_normalize_component_pybind.cc @@ -25,11 +25,12 @@ using namespace kaldi::nnet3; void pybind_nnet_normalize_component(py::module& m) { using PyClass = kaldi::nnet3::BatchNormComponent; - py::class_(m, "BatchNormComponent") - .def("Type", &PyClass::Type) - .def("StatsSum", &PyClass::StatsSum) - .def("StatsSumsq", &PyClass::StatsSumsq) + py::class_(m, "BatchNormComponent") + .def("StatsSum", &PyClass::StatsSum, py::return_value_policy::reference) + .def("StatsSumsq", &PyClass::StatsSumsq, py::return_value_policy::reference) .def("Count", &PyClass::Count) - .def("Offset", &PyClass::Offset) - .def("Scale", overload_cast_<>()(&PyClass::Scale, py::const_)); + .def("Eps", &PyClass::Eps) + .def("Offset", &PyClass::Offset, py::return_value_policy::reference) + .def("Scale", overload_cast_<>()(&PyClass::Scale, py::const_), + py::return_value_policy::reference); } diff --git a/src/pybind/nnet3/nnet_normalize_component_pybind.h b/src/pybind/nnet3/nnet_normalize_component_pybind.h index 85963bc5f72..fd057cf6763 100755 --- a/src/pybind/nnet3/nnet_normalize_component_pybind.h +++ b/src/pybind/nnet3/nnet_normalize_component_pybind.h @@ -15,11 +15,11 @@ // See the Apache 2 License for the specific language governing permissions and // limitations under the License. -#ifndef KALDI_PYBIND_NNET3_NNET_NORNALIZE_COMPONENT_PYBIND_H_ -#define KALDI_PYBIND_NNET3_NNET_NORNALIZE_COMPONENT_PYBIND_H_ +#ifndef KALDI_PYBIND_NNET3_NNET_NORMALIZE_COMPONENT_PYBIND_H_ +#define KALDI_PYBIND_NNET3_NNET_NORMALIZE_COMPONENT_PYBIND_H_ #include "pybind/kaldi_pybind.h" void pybind_nnet_normalize_component(py::module& m); -#endif // KALDI_PYBIND_NNET3_NNET_NORNALIZE_COMPONENT_PYBIND_H_ +#endif // KALDI_PYBIND_NNET3_NNET_NORMALIZE_COMPONENT_PYBIND_H_ diff --git a/src/pybind/nnet3/nnet_simple_component_pybind.cc b/src/pybind/nnet3/nnet_simple_component_pybind.cc index eaac5bdc03f..1a32bef3496 100755 --- a/src/pybind/nnet3/nnet_simple_component_pybind.cc +++ b/src/pybind/nnet3/nnet_simple_component_pybind.cc @@ -25,21 +25,22 @@ using namespace kaldi::nnet3; void pybind_nnet_simple_component(py::module& m) { using FAC = FixedAffineComponent; - py::class_(m, "FixedAffineComponent") - .def("Type", &FAC::Type) - .def("LinearParams", &FAC::LinearParams) - .def("BiasParams", &FAC::BiasParams); + py::class_(m, "FixedAffineComponent") + .def("LinearParams", &FAC::LinearParams, + py::return_value_policy::reference) + .def("BiasParams", &FAC::BiasParams, py::return_value_policy::reference); using LC = LinearComponent; - py::class_(m, "LinearComponent") - .def("Type", &LC::Type) - .def("Params", overload_cast_<>()(&LC::Params, py::const_), py::return_value_policy::reference); + py::class_(m, "LinearComponent") + .def("Params", overload_cast_<>()(&LC::Params2, py::const_), + py::return_value_policy::reference); using AC = AffineComponent; - py::class_(m, "AffineComponent") - .def("Type", &AC::Type) - .def("LinearParams", overload_cast_<>()(&AC::LinearParams, py::const_)) - .def("BiasParams", overload_cast_<>()(&AC::BiasParams, py::const_)); + py::class_(m, "AffineComponent") + .def("LinearParams", overload_cast_<>()(&AC::LinearParams, py::const_), + py::return_value_policy::reference) + .def("BiasParams", overload_cast_<>()(&AC::BiasParams, py::const_), + py::return_value_policy::reference); using NGAC = NaturalGradientAffineComponent; py::class_(m, "NaturalGradientAffineComponent"); From 39874071aee115a341ae2d53cd3eae51776efddc Mon Sep 17 00:00:00 2001 From: fanlu Date: Fri, 6 Mar 2020 17:43:13 +0800 Subject: [PATCH 5/7] add testmode func in batchnorm pybind --- src/pybind/cudamatrix/cu_matrix_pybind.cc | 3 +- src/pybind/nnet3/Makefile | 1 + src/pybind/nnet3/nnet_nnet_pybind_test.py | 52 ++++++++++++++----- .../nnet3/nnet_normalize_component_pybind.cc | 5 +- 4 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/pybind/cudamatrix/cu_matrix_pybind.cc b/src/pybind/cudamatrix/cu_matrix_pybind.cc index d15bd772f09..2dfaed6bfd2 100644 --- a/src/pybind/cudamatrix/cu_matrix_pybind.cc +++ b/src/pybind/cudamatrix/cu_matrix_pybind.cc @@ -56,8 +56,7 @@ void pybind_cu_matrix(py::module& m) { .def(py::init&, MatrixTransposeType>(), py::arg("other"), py::arg("trans") = kNoTrans) .def("to_dlpack", - [](py::object obj) { return CuMatrixToDLPack(&obj); }) - ; + [](py::object obj) { return CuMatrixToDLPack(&obj); }); } { using PyClass = CuSubMatrix; diff --git a/src/pybind/nnet3/Makefile b/src/pybind/nnet3/Makefile index d9fd9059847..6f023432a13 100644 --- a/src/pybind/nnet3/Makefile +++ b/src/pybind/nnet3/Makefile @@ -1,4 +1,5 @@ test: python3 ./nnet_chain_example_pybind_test.py + python3 ./nnet_nnet_pybind_test.py diff --git a/src/pybind/nnet3/nnet_nnet_pybind_test.py b/src/pybind/nnet3/nnet_nnet_pybind_test.py index 8a90be163f3..67e1af71d22 100644 --- a/src/pybind/nnet3/nnet_nnet_pybind_test.py +++ b/src/pybind/nnet3/nnet_nnet_pybind_test.py @@ -3,22 +3,23 @@ # Copyright 2020 JD AI, Beijing, China (author: Lu Fan) # Apache 2.0 -import kaldi -import unittest -from torch.utils.dlpack import to_dlpack -from torch.utils.dlpack import from_dlpack import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) +import unittest + try: import torch + from torch.utils.dlpack import to_dlpack + from torch.utils.dlpack import from_dlpack except ImportError: print('This test needs PyTorch.') print('Please install PyTorch first.') print('PyTorch 1.3.0dev20191006 has been tested and is known to work.') sys.exit(0) +import kaldi """ input dim=40 name=input @@ -39,8 +40,6 @@ prefinal-layer name=prefinal-xent input=prefinal-l $prefinal_opts big-dim=16 small-dim=4 output-layer name=output-xent dim=$num_targets learning-rate-factor=$learning_rate_factor $output_opts """ - - class TestNnetNnet(unittest.TestCase): def test_nnet_nnet(self): @@ -58,7 +57,7 @@ def test_nnet_nnet(self): kaldi.SelectGpuDevice(device_id=device_id) kaldi.CuDeviceAllowMultithreading() - final_mdl = 'src/pybind/nnet3/final.mdl' + final_mdl = 'final.mdl' nnet = kaldi.read_nnet3_model(final_mdl) for i in range(nnet.NumComponents()): component = nnet.GetComponent(i) @@ -83,7 +82,11 @@ def test_nnet_nnet(self): self.assertEqual(bias_params.shape, (16,)) elif comp_name == 'tdnn1.batchnorm': self.assertEqual(comp_type, 'BatchNormComponent') - # TODO BN get mean and var + component.SetTestMode(True) + offset = from_dlpack(component.Offset().to_dlpack()) + scale = from_dlpack(component.Scale().to_dlpack()) + self.assertEqual(offset.shape, (16,)) + self.assertEqual(scale.shape, (16,)) elif comp_name == 'tdnnf2.linear': self.assertEqual(comp_type, 'TdnnComponent') linear_params = from_dlpack( @@ -98,7 +101,11 @@ def test_nnet_nnet(self): self.assertEqual(bias_params.shape, (16,)) elif comp_name == 'tdnnf2.batchnorm': self.assertEqual(comp_type, 'BatchNormComponent') - # TODO BN get mean and var + component.SetTestMode(True) + offset = from_dlpack(component.Offset().to_dlpack()) + scale = from_dlpack(component.Scale().to_dlpack()) + self.assertEqual(offset.shape, (16,)) + self.assertEqual(scale.shape, (16,)) elif comp_name == 'prefinal-l': self.assertEqual(comp_type, 'LinearComponent') params = from_dlpack(component.Params().to_dlpack()) @@ -112,14 +119,22 @@ def test_nnet_nnet(self): self.assertEqual(bias_params.shape, (16,)) elif comp_name == 'prefinal-chain.batchnorm1': self.assertEqual(comp_type, 'BatchNormComponent') - # TODO BN get mean and var + component.SetTestMode(True) + offset = from_dlpack(component.Offset().to_dlpack()) + scale = from_dlpack(component.Scale().to_dlpack()) + self.assertEqual(offset.shape, (16,)) + self.assertEqual(scale.shape, (16,)) elif comp_name == 'prefinal-chain.linear': self.assertEqual(comp_type, 'LinearComponent') params = from_dlpack(component.Params().to_dlpack()) self.assertEqual(linear_params.shape, (16, 4)) elif comp_name == 'prefinal-chain.batchnorm2': self.assertEqual(comp_type, 'BatchNormComponent') - # TODO BN get mean and var + component.SetTestMode(True) + offset = from_dlpack(component.Offset().to_dlpack()) + scale = from_dlpack(component.Scale().to_dlpack()) + self.assertEqual(offset.shape, (4,)) + self.assertEqual(scale.shape, (4,)) elif comp_name == 'output.affine': self.assertEqual(comp_type, 'NaturalGradientAffineComponent') linear_params = from_dlpack( @@ -136,14 +151,22 @@ def test_nnet_nnet(self): self.assertEqual(bias_params.shape, (16,)) elif comp_name == 'prefinal-xent.batchnorm1': self.assertEqual(comp_type, 'BatchNormComponent') - # TODO BN get mean and var + component.SetTestMode(True) + offset = from_dlpack(component.Offset().to_dlpack()) + scale = from_dlpack(component.Scale().to_dlpack()) + self.assertEqual(offset.shape, (16,)) + self.assertEqual(scale.shape, (16,)) elif comp_name == 'prefinal-xent.linear': self.assertEqual(comp_type, 'LinearComponent') params = from_dlpack(component.Params().to_dlpack()) self.assertEqual(linear_params.shape, (16, 4)) elif comp_name == 'prefinal-xent.batchnorm2': self.assertEqual(comp_type, 'BatchNormComponent') - # TODO BN get mean and var + component.SetTestMode(True) + offset = from_dlpack(component.Offset().to_dlpack()) + scale = from_dlpack(component.Scale().to_dlpack()) + self.assertEqual(offset.shape, (4,)) + self.assertEqual(scale.shape, (4,)) elif comp_name == 'output-xent.affine': self.assertEqual(comp_type, 'NaturalGradientAffineComponent') linear_params = from_dlpack( @@ -151,7 +174,8 @@ def test_nnet_nnet(self): bias_params = from_dlpack(component.BiasParams().to_dlpack()) self.assertEqual(linear_params.shape, (3448, 4)) self.assertEqual(bias_params.shape, (3448,)) - + else: + self.assertEqual(comp_type, 'LogSoftmaxComponent') if __name__ == '__main__': unittest.main() diff --git a/src/pybind/nnet3/nnet_normalize_component_pybind.cc b/src/pybind/nnet3/nnet_normalize_component_pybind.cc index b86125f76de..70d69186b40 100755 --- a/src/pybind/nnet3/nnet_normalize_component_pybind.cc +++ b/src/pybind/nnet3/nnet_normalize_component_pybind.cc @@ -27,9 +27,12 @@ void pybind_nnet_normalize_component(py::module& m) { using PyClass = kaldi::nnet3::BatchNormComponent; py::class_(m, "BatchNormComponent") .def("StatsSum", &PyClass::StatsSum, py::return_value_policy::reference) - .def("StatsSumsq", &PyClass::StatsSumsq, py::return_value_policy::reference) + .def("StatsSumsq", &PyClass::StatsSumsq, + py::return_value_policy::reference) + .def("Mean", &PyClass::Mean, py::return_value_policy::reference) .def("Count", &PyClass::Count) .def("Eps", &PyClass::Eps) + .def("SetTestMode", &PyClass::SetTestMode, py::arg("test_mode")) .def("Offset", &PyClass::Offset, py::return_value_policy::reference) .def("Scale", overload_cast_<>()(&PyClass::Scale, py::const_), py::return_value_policy::reference); From 946c81f6448531c10afe18b5d3a9f63e13fd3465 Mon Sep 17 00:00:00 2001 From: fanlu Date: Fri, 6 Mar 2020 18:25:19 +0800 Subject: [PATCH 6/7] change StatsSum StatsSumsq to Mean Var --- src/nnet3/nnet-normalize-component.cc | 18 +++++++ src/nnet3/nnet-normalize-component.h | 4 +- src/pybind/nnet3/nnet3_pybind.cc | 0 .../nnet3/nnet_chain_example_pybind_test.py | 0 src/pybind/nnet3/nnet_component_itf_pybind.cc | 0 src/pybind/nnet3/nnet_component_itf_pybind.h | 0 .../nnet_convolutional_component_pybind.cc | 0 .../nnet_convolutional_component_pybind.h | 0 src/pybind/nnet3/nnet_nnet_pybind.cc | 0 src/pybind/nnet3/nnet_nnet_pybind_test.py | 48 +++++++++---------- .../nnet3/nnet_normalize_component_pybind.cc | 6 +-- .../nnet3/nnet_normalize_component_pybind.h | 0 .../nnet3/nnet_simple_component_pybind.cc | 0 .../nnet3/nnet_simple_component_pybind.h | 0 14 files changed, 46 insertions(+), 30 deletions(-) mode change 100755 => 100644 src/pybind/nnet3/nnet3_pybind.cc mode change 100755 => 100644 src/pybind/nnet3/nnet_chain_example_pybind_test.py mode change 100755 => 100644 src/pybind/nnet3/nnet_component_itf_pybind.cc mode change 100755 => 100644 src/pybind/nnet3/nnet_component_itf_pybind.h mode change 100755 => 100644 src/pybind/nnet3/nnet_convolutional_component_pybind.cc mode change 100755 => 100644 src/pybind/nnet3/nnet_convolutional_component_pybind.h mode change 100755 => 100644 src/pybind/nnet3/nnet_nnet_pybind.cc mode change 100755 => 100644 src/pybind/nnet3/nnet_normalize_component_pybind.cc mode change 100755 => 100644 src/pybind/nnet3/nnet_normalize_component_pybind.h mode change 100755 => 100644 src/pybind/nnet3/nnet_simple_component_pybind.cc mode change 100755 => 100644 src/pybind/nnet3/nnet_simple_component_pybind.h diff --git a/src/nnet3/nnet-normalize-component.cc b/src/nnet3/nnet-normalize-component.cc index fdfd9544785..0c17d31fb85 100644 --- a/src/nnet3/nnet-normalize-component.cc +++ b/src/nnet3/nnet-normalize-component.cc @@ -641,6 +641,24 @@ void BatchNormComponent::Write(std::ostream &os, bool binary) const { WriteToken(os, binary, ""); } +CuVector BatchNormComponent::Mean() { + CuVector mean(stats_sum_); + if (count_ != 0) { + mean.Scale(1.0 / count_); + } + return mean; +} + +CuVector BatchNormComponent::Var() { + CuVector mean(stats_sum_), var(stats_sumsq_); + if (count_ != 0) { + mean.Scale(1.0 / count_); + var.Scale(1.0 / count_); + var.AddVecVec(-1.0, mean, mean, 1.0); + } + return var; +} + void BatchNormComponent::Scale(BaseFloat scale) { if (scale == 0) { count_ = 0.0; diff --git a/src/nnet3/nnet-normalize-component.h b/src/nnet3/nnet-normalize-component.h index f5b89295e3b..6503cdc833a 100644 --- a/src/nnet3/nnet-normalize-component.h +++ b/src/nnet3/nnet-normalize-component.h @@ -224,8 +224,8 @@ class BatchNormComponent: public Component { const CuVector &Offset() const { return offset_; } const CuVector &Scale() const { return scale_; } - CuVector &StatsSum() { return stats_sum_; } - CuVector &StatsSumsq() { return stats_sumsq_; } + CuVector Mean(); + CuVector Var(); double Count() { return count_; } BaseFloat Eps() { return epsilon_; } diff --git a/src/pybind/nnet3/nnet3_pybind.cc b/src/pybind/nnet3/nnet3_pybind.cc old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_chain_example_pybind_test.py b/src/pybind/nnet3/nnet_chain_example_pybind_test.py old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_component_itf_pybind.cc b/src/pybind/nnet3/nnet_component_itf_pybind.cc old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_component_itf_pybind.h b/src/pybind/nnet3/nnet_component_itf_pybind.h old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_convolutional_component_pybind.cc b/src/pybind/nnet3/nnet_convolutional_component_pybind.cc old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_convolutional_component_pybind.h b/src/pybind/nnet3/nnet_convolutional_component_pybind.h old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_nnet_pybind.cc b/src/pybind/nnet3/nnet_nnet_pybind.cc old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_nnet_pybind_test.py b/src/pybind/nnet3/nnet_nnet_pybind_test.py index 67e1af71d22..5efa06058fa 100644 --- a/src/pybind/nnet3/nnet_nnet_pybind_test.py +++ b/src/pybind/nnet3/nnet_nnet_pybind_test.py @@ -83,10 +83,10 @@ def test_nnet_nnet(self): elif comp_name == 'tdnn1.batchnorm': self.assertEqual(comp_type, 'BatchNormComponent') component.SetTestMode(True) - offset = from_dlpack(component.Offset().to_dlpack()) - scale = from_dlpack(component.Scale().to_dlpack()) - self.assertEqual(offset.shape, (16,)) - self.assertEqual(scale.shape, (16,)) + mean = from_dlpack(component.Mean().to_dlpack()) + var = from_dlpack(component.Var().to_dlpack()) + self.assertEqual(mean.shape, (16,)) + self.assertEqual(var.shape, (16,)) elif comp_name == 'tdnnf2.linear': self.assertEqual(comp_type, 'TdnnComponent') linear_params = from_dlpack( @@ -102,10 +102,10 @@ def test_nnet_nnet(self): elif comp_name == 'tdnnf2.batchnorm': self.assertEqual(comp_type, 'BatchNormComponent') component.SetTestMode(True) - offset = from_dlpack(component.Offset().to_dlpack()) - scale = from_dlpack(component.Scale().to_dlpack()) - self.assertEqual(offset.shape, (16,)) - self.assertEqual(scale.shape, (16,)) + mean = from_dlpack(component.Mean().to_dlpack()) + var = from_dlpack(component.Var().to_dlpack()) + self.assertEqual(mean.shape, (16,)) + self.assertEqual(var.shape, (16,)) elif comp_name == 'prefinal-l': self.assertEqual(comp_type, 'LinearComponent') params = from_dlpack(component.Params().to_dlpack()) @@ -120,10 +120,10 @@ def test_nnet_nnet(self): elif comp_name == 'prefinal-chain.batchnorm1': self.assertEqual(comp_type, 'BatchNormComponent') component.SetTestMode(True) - offset = from_dlpack(component.Offset().to_dlpack()) - scale = from_dlpack(component.Scale().to_dlpack()) - self.assertEqual(offset.shape, (16,)) - self.assertEqual(scale.shape, (16,)) + mean = from_dlpack(component.Mean().to_dlpack()) + var = from_dlpack(component.Var().to_dlpack()) + self.assertEqual(mean.shape, (16,)) + self.assertEqual(var.shape, (16,)) elif comp_name == 'prefinal-chain.linear': self.assertEqual(comp_type, 'LinearComponent') params = from_dlpack(component.Params().to_dlpack()) @@ -131,10 +131,10 @@ def test_nnet_nnet(self): elif comp_name == 'prefinal-chain.batchnorm2': self.assertEqual(comp_type, 'BatchNormComponent') component.SetTestMode(True) - offset = from_dlpack(component.Offset().to_dlpack()) - scale = from_dlpack(component.Scale().to_dlpack()) - self.assertEqual(offset.shape, (4,)) - self.assertEqual(scale.shape, (4,)) + mean = from_dlpack(component.Mean().to_dlpack()) + var = from_dlpack(component.Var().to_dlpack()) + self.assertEqual(mean.shape, (4,)) + self.assertEqual(var.shape, (4,)) elif comp_name == 'output.affine': self.assertEqual(comp_type, 'NaturalGradientAffineComponent') linear_params = from_dlpack( @@ -152,10 +152,10 @@ def test_nnet_nnet(self): elif comp_name == 'prefinal-xent.batchnorm1': self.assertEqual(comp_type, 'BatchNormComponent') component.SetTestMode(True) - offset = from_dlpack(component.Offset().to_dlpack()) - scale = from_dlpack(component.Scale().to_dlpack()) - self.assertEqual(offset.shape, (16,)) - self.assertEqual(scale.shape, (16,)) + mean = from_dlpack(component.Mean().to_dlpack()) + var = from_dlpack(component.Var().to_dlpack()) + self.assertEqual(mean.shape, (16,)) + self.assertEqual(var.shape, (16,)) elif comp_name == 'prefinal-xent.linear': self.assertEqual(comp_type, 'LinearComponent') params = from_dlpack(component.Params().to_dlpack()) @@ -163,10 +163,10 @@ def test_nnet_nnet(self): elif comp_name == 'prefinal-xent.batchnorm2': self.assertEqual(comp_type, 'BatchNormComponent') component.SetTestMode(True) - offset = from_dlpack(component.Offset().to_dlpack()) - scale = from_dlpack(component.Scale().to_dlpack()) - self.assertEqual(offset.shape, (4,)) - self.assertEqual(scale.shape, (4,)) + mean = from_dlpack(component.Mean().to_dlpack()) + var = from_dlpack(component.Var().to_dlpack()) + self.assertEqual(mean.shape, (4,)) + self.assertEqual(var.shape, (4,)) elif comp_name == 'output-xent.affine': self.assertEqual(comp_type, 'NaturalGradientAffineComponent') linear_params = from_dlpack( diff --git a/src/pybind/nnet3/nnet_normalize_component_pybind.cc b/src/pybind/nnet3/nnet_normalize_component_pybind.cc old mode 100755 new mode 100644 index 70d69186b40..ab5b4b79f3c --- a/src/pybind/nnet3/nnet_normalize_component_pybind.cc +++ b/src/pybind/nnet3/nnet_normalize_component_pybind.cc @@ -26,10 +26,8 @@ using namespace kaldi::nnet3; void pybind_nnet_normalize_component(py::module& m) { using PyClass = kaldi::nnet3::BatchNormComponent; py::class_(m, "BatchNormComponent") - .def("StatsSum", &PyClass::StatsSum, py::return_value_policy::reference) - .def("StatsSumsq", &PyClass::StatsSumsq, - py::return_value_policy::reference) - .def("Mean", &PyClass::Mean, py::return_value_policy::reference) + .def("Mean", &PyClass::Mean) + .def("Var", &PyClass::Var) .def("Count", &PyClass::Count) .def("Eps", &PyClass::Eps) .def("SetTestMode", &PyClass::SetTestMode, py::arg("test_mode")) diff --git a/src/pybind/nnet3/nnet_normalize_component_pybind.h b/src/pybind/nnet3/nnet_normalize_component_pybind.h old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_simple_component_pybind.cc b/src/pybind/nnet3/nnet_simple_component_pybind.cc old mode 100755 new mode 100644 diff --git a/src/pybind/nnet3/nnet_simple_component_pybind.h b/src/pybind/nnet3/nnet_simple_component_pybind.h old mode 100755 new mode 100644 From 11429f223921fb6d802123460d1a2f68f09d4da4 Mon Sep 17 00:00:00 2001 From: fanlu Date: Fri, 6 Mar 2020 20:09:07 +0800 Subject: [PATCH 7/7] make const --- src/nnet3/nnet-normalize-component.cc | 4 ++-- src/nnet3/nnet-normalize-component.h | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/nnet3/nnet-normalize-component.cc b/src/nnet3/nnet-normalize-component.cc index 0c17d31fb85..845631b09bf 100644 --- a/src/nnet3/nnet-normalize-component.cc +++ b/src/nnet3/nnet-normalize-component.cc @@ -641,7 +641,7 @@ void BatchNormComponent::Write(std::ostream &os, bool binary) const { WriteToken(os, binary, ""); } -CuVector BatchNormComponent::Mean() { +CuVector BatchNormComponent::Mean() const { CuVector mean(stats_sum_); if (count_ != 0) { mean.Scale(1.0 / count_); @@ -649,7 +649,7 @@ CuVector BatchNormComponent::Mean() { return mean; } -CuVector BatchNormComponent::Var() { +CuVector BatchNormComponent::Var() const { CuVector mean(stats_sum_), var(stats_sumsq_); if (count_ != 0) { mean.Scale(1.0 / count_); diff --git a/src/nnet3/nnet-normalize-component.h b/src/nnet3/nnet-normalize-component.h index 6503cdc833a..4f92dd02bc6 100644 --- a/src/nnet3/nnet-normalize-component.h +++ b/src/nnet3/nnet-normalize-component.h @@ -224,10 +224,10 @@ class BatchNormComponent: public Component { const CuVector &Offset() const { return offset_; } const CuVector &Scale() const { return scale_; } - CuVector Mean(); - CuVector Var(); - double Count() { return count_; } - BaseFloat Eps() { return epsilon_; } + CuVector Mean() const; + CuVector Var() const; + double Count() const { return count_; } + BaseFloat Eps() const { return epsilon_; } private: