28 int main(
int argc,
char *argv[]) {
30 using namespace kaldi;
33 typedef kaldi::int64 int64;
36 "This program first identifies any affine or block affine layers that\n" 37 "are followed by pnorm and then renormalize layers. Then it rescales\n" 38 "those layers such that the parameter stddev is 1.0 after scaling\n" 39 "(the target stddev is configurable by the --stddev option).\n" 40 "If you supply the option --stddev-from=<model-filename>, it rescales\n" 41 "those layers to match the standard deviations of corresponding layers\n" 42 "in the specified model.\n" 44 "Usage: nnet-normalize-stddev [options] <model-in> <model-out>\n" 45 " e.g.: nnet-normalize-stddev final.mdl final.mdl\n";
47 bool binary_write =
true;
49 std::string reference_model_filename;
52 po.
Register(
"binary", &binary_write,
"Write output in binary mode");
53 po.
Register(
"stddev-from", &reference_model_filename,
"Reference model");
54 po.
Register(
"stddev", &stddev,
"Target standard deviation that we normalize " 55 "to (note: is overridden by --stddev-from option, if supplied)");
64 std::string nnet_rxfilename = po.
GetArg(1),
65 normalized_nnet_rxfilename = po.
GetArg(2);
71 Input ki(nnet_rxfilename, &binary_read);
80 std::vector<int32> identified_components;
90 if (ac == NULL && bac == NULL)
104 if (nc == NULL && pwc == NULL)
116 identified_components.push_back(c);
120 if (!reference_model_filename.empty()) {
122 Input ki(reference_model_filename, &binary_read);
131 for (int32 c = 0; c < identified_components.size(); c++) {
133 if (!reference_model_filename.empty()) {
142 params.Add(-1.0 * params_average);
143 ref_stddev = sqrt(
VecVec(params, params)
144 / static_cast<BaseFloat>(params.Dim()));
155 params.Add(-1.0 * params_average);
157 / static_cast<BaseFloat>(params.Dim()));
158 if (params_stddev > 0.0) {
159 uc->
Scale(ref_stddev / params_stddev);
160 KALDI_LOG <<
"Normalized component " << identified_components[c];
165 Output ko(normalized_nnet_rxfilename, binary_write);
170 }
catch(
const std::exception &e) {
171 std::cerr << e.what() <<
'\n';
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
const Component & GetComponent(int32 c) const
virtual void Scale(BaseFloat scale)=0
This new virtual function scales the parameters by this amount.
void PrintUsage(bool print_command_line=false)
Prints the usage documentation [provided in the constructor].
Abstract class, basic element of the network, it is a box with defined inputs, outputs, and tranformation functions interface.
void Read(std::istream &is, bool binary)
virtual void Vectorize(VectorBase< BaseFloat > *params) const
Turns the parameters into vector form.
void Register(const std::string &name, bool *ptr, const std::string &doc)
int32 NumComponents() const
Returns number of components– think of this as similar to # of layers, but e.g.
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
Take the absoute values of an input vector to a power.
void Read(std::istream &is, bool binary)
void Write(std::ostream &os, bool binary) const
int Read(int argc, const char *const *argv)
Parses the command line options and fills the ParseOptions-registered variables.
std::string GetArg(int param) const
Returns one of the positional parameters; 1-based indexing for argc/argv compatibility.
int NumArgs() const
Number of positional parameters (c.f. argc-1).
virtual int32 GetParameterDim() const
The following new virtual function returns the total dimension of the parameters in this class...
void Write(std::ostream &os, bool binary) const
A class representing a vector.
#define KALDI_ASSERT(cond)
int main(int argc, char *argv[])
Real VecVec(const VectorBase< Real > &a, const VectorBase< Real > &b)
Returns dot product between v1 and v2.
const Nnet & GetNnet() const
Class UpdatableComponent is a Component which has trainable parameters and contains some global param...