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 [options] <model-in1> <model-in2> ... <model-inN> <valid-examples-in> <model-out>\n" 44 " nnet-combine 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;
51 po.Register(
"binary", &binary_write,
"Write output in binary mode");
57 if (po.NumArgs() < 3) {
63 nnet1_rxfilename = po.GetArg(1),
64 valid_examples_rspecifier = po.GetArg(po.NumArgs() - 1),
65 nnet_wxfilename = po.GetArg(po.NumArgs());
71 Input ki(nnet1_rxfilename, &binary_read);
72 trans_model.
Read(ki.Stream(), binary_read);
73 am_nnet1.
Read(ki.Stream(), binary_read);
76 int32 num_nnets = po.NumArgs() - 2;
77 std::vector<Nnet> nnets(num_nnets);
81 for (int32
n = 1;
n < num_nnets;
n++) {
85 Input ki(po.GetArg(1 +
n), &binary_read);
86 trans_model.
Read(ki.Stream(), binary_read);
87 am_nnet.
Read(ki.Stream(), binary_read);
91 std::vector<NnetExample> validation_set;
96 valid_examples_rspecifier);
97 for (; !example_reader.Done(); example_reader.Next())
98 validation_set.push_back(example_reader.Value());
99 KALDI_LOG <<
"Read " << validation_set.size() <<
" examples from the " 100 <<
"validation set.";
110 Output ko(nnet_wxfilename, binary_write);
111 trans_model.
Write(ko.Stream(), binary_write);
112 am_nnet1.
Write(ko.Stream(), binary_write);
115 KALDI_LOG <<
"Finished combining neural nets, wrote model to " 117 return (validation_set.size() == 0 ? 1 : 0);
118 }
catch(
const std::exception &e) {
119 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 Register(OptionsItf *opts)
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...
Configuration class that controls neural net combination, where we combine a number of neural nets...
void Write(std::ostream &os, bool binary) const
#define KALDI_ASSERT(cond)
static void CombineNnets(const Vector< BaseFloat > &scale_params, const std::vector< Nnet > &nnets, Nnet *dest)
const Nnet & GetNnet() const