30 int main(
int argc,
char *argv[]) {
32 using namespace kaldi;
35 typedef kaldi::int64 int64;
38 "Does the neural net computation for each file of input features, and\n" 39 "outputs as a matrix the result. Used mostly for debugging.\n" 40 "Note: if you want it to apply a log (e.g. for log-likelihoods), use\n" 43 "Usage: nnet-am-compute [options] <model-in> <feature-rspecifier> " 44 "<feature-or-loglikes-wspecifier>\n" 45 "See also: nnet-compute, nnet-logprob\n";
47 bool divide_by_priors =
false;
48 bool apply_log =
false;
49 bool pad_input =
true;
50 std::string use_gpu =
"no";
53 po.
Register(
"divide-by-priors", ÷_by_priors,
"If true, " 54 "divide by the priors stored in the model and re-normalize, apply-log may follow");
55 po.
Register(
"apply-log", &apply_log,
"Apply a log to the result of the computation " 56 "before outputting.");
57 po.
Register(
"pad-input", &pad_input,
"If true, duplicate the first and last frames " 58 "of input features as required for temporal context, to prevent #frames " 59 "of output being less than those of input.");
61 "yes|no|optional|wait, only has effect if compiled with CUDA");
62 po.
Register(
"chunk-size", &chunk_size,
"Process the feature matrix in chunks. " 63 "This is useful when processing large feature files in the GPU. " 64 "If chunk-size > 0, pad-input must be true.");
76 CuDevice::Instantiate().SelectGpuId(use_gpu);
79 std::string nnet_rxfilename = po.
GetArg(1),
80 features_rspecifier = po.
GetArg(2),
81 features_or_loglikes_wspecifier = po.
GetArg(3);
87 Input ki(nnet_rxfilename, &binary_read);
94 int64 num_done = 0, num_frames = 0;
98 "Priors in neural network not set up.");
99 inv_priors.ApplyPow(-1.0);
104 for (; !feature_reader.
Done(); feature_reader.
Next()) {
105 std::string utt = feature_reader.
Key();
111 if (output_frames <= 0) {
112 KALDI_WARN <<
"Skipping utterance " << utt <<
" because output " 113 <<
"would be empty.";
120 if (chunk_size > 0 && chunk_size < feats.
NumRows()) {
125 cu_output.
Swap(&output);
127 if (divide_by_priors) {
130 for (int32
i = 0;
i < output.
NumRows();
i++) {
134 KALDI_WARN <<
"Bad sum of probabilities " << p;
136 frame.
Scale(1.0 / p);
145 writer.
Write(utt, output);
150 CuDevice::Instantiate().PrintProfile();
153 KALDI_LOG <<
"Processed " << num_done <<
" feature files, " 154 << num_frames <<
" frames of input were processed.";
156 return (num_done == 0 ? 1 : 0);
157 }
catch(
const std::exception &e) {
158 std::cerr << e.what() <<
'\n';
This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
int32 LeftContext() const
Returns the left-context summed over all the Components...
void PrintUsage(bool print_command_line=false)
Prints the usage documentation [provided in the constructor].
void Read(std::istream &is, bool binary)
int32 OutputDim() const
The output dimension of the network – typically the number of pdfs.
A templated class for writing objects to an archive or script file; see The Table concept...
void NnetComputationChunked(const Nnet &nnet, const CuMatrixBase< BaseFloat > &input, int32 chunk_size, CuMatrixBase< BaseFloat > *output)
Does the basic neural net computation, on a sequence of data (e.g.
This class represents a matrix that's stored on the GPU if we have one, and in memory if not...
void NnetComputation(const Nnet &nnet, const CuMatrixBase< BaseFloat > &input, bool pad_input, CuMatrixBase< BaseFloat > *output)
Does the basic neural net computation, on a sequence of data (e.g.
void Write(const std::string &key, const T &value) const
void Register(const std::string &name, bool *ptr, const std::string &doc)
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
void Swap(Matrix< Real > *mat)
void Read(std::istream &is, bool binary)
const VectorBase< BaseFloat > & Priors() const
int32 RightContext() const
Returns the right-context summed over all the Components...
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
int main(int argc, char *argv[])
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.
void Scale(Real alpha)
Multiplies all elements by this constant.
Real Sum() const
Returns sum of the elements.
void MulColsVec(const VectorBase< Real > &scale)
Equivalent to (*this) = (*this) * diag(scale).
int NumArgs() const
Number of positional parameters (c.f. argc-1).
A class representing a vector.
#define KALDI_ASSERT(cond)
MatrixIndexT NumRows() const
Returns number of rows (or zero for empty matrix).
void ApplyFloor(Real floor_val)
Represents a non-allocating general vector which can be defined as a sub-vector of higher-level vecto...
const Nnet & GetNnet() const