29 using namespace kaldi;
32 typedef kaldi::int64 int64;
35 "Using a validation set, compute an optimal combination of a number of\n" 36 "neural nets (the combination weights are separate for each layer and\n" 37 "do not have to sum to one). The optimization is BFGS, which is initialized\n" 38 "from the best of the individual input neural nets (or as specified by\n" 41 "Usage: nnet-combine-fast [options] <model-in1> <model-in2> ... <model-inN> <valid-examples-in> <model-out>\n" 44 " nnet-combine-fast 1.1.nnet 1.2.nnet 1.3.nnet ark:valid.egs 2.nnet\n" 45 "Caution: the first input neural net must not be a gradient.\n";
47 bool binary_write =
true;
49 std::string use_gpu =
"yes";
52 po.Register(
"binary", &binary_write,
"Write output in binary mode");
53 po.Register(
"use-gpu", &use_gpu,
54 "yes|no|optional|wait, only has effect if compiled with CUDA");
60 if (po.NumArgs() < 3) {
66 nnet1_rxfilename = po.GetArg(1),
67 valid_examples_rspecifier = po.GetArg(po.NumArgs() - 1),
68 nnet_wxfilename = po.GetArg(po.NumArgs());
72 CuDevice::Instantiate().SelectGpuId(use_gpu);
80 Input ki(nnet1_rxfilename, &binary_read);
81 trans_model.
Read(ki.Stream(), binary_read);
82 am_nnet1.
Read(ki.Stream(), binary_read);
85 int32 num_nnets = po.NumArgs() - 2;
86 std::vector<Nnet> nnets(num_nnets);
90 for (int32
n = 1;
n < num_nnets;
n++) {
94 Input ki(po.GetArg(1 +
n), &binary_read);
95 trans_model.
Read(ki.Stream(), binary_read);
96 am_nnet.
Read(ki.Stream(), binary_read);
100 std::vector<NnetExample> validation_set;
105 valid_examples_rspecifier);
106 for (; !example_reader.Done(); example_reader.Next())
107 validation_set.push_back(example_reader.Value());
108 KALDI_LOG <<
"Read " << validation_set.size() <<
" examples from the " 109 <<
"validation set.";
119 Output ko(nnet_wxfilename, binary_write);
120 trans_model.
Write(ko.Stream(), binary_write);
121 am_nnet1.
Write(ko.Stream(), binary_write);
124 KALDI_LOG <<
"Finished combining neural nets, wrote model to " 126 return (validation_set.size() == 0 ? 1 : 0);
127 }
catch(
const std::exception &e) {
128 std::cerr << e.what() <<
'\n';
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
void Read(std::istream &is, bool binary)
void CombineNnetsFast(const NnetCombineFastConfig &combine_config, const std::vector< NnetExample > &validation_set, const std::vector< Nnet > &nnets_in, Nnet *nnet_out)
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
void Read(std::istream &is, bool binary)
void Write(std::ostream &os, bool binary) const
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
void Write(std::ostream &os, bool binary) const
#define KALDI_ASSERT(cond)
Configuration class that controls neural net combination, where we combine a number of neural nets...
const Nnet & GetNnet() const
void Register(OptionsItf *opts)