18#ifndef TESSERACT_LSTM_LSTMRECOGNIZER_H_
19#define TESSERACT_LSTM_LSTMRECOGNIZER_H_
58 return network_->NumOutputs();
63 return training_iteration_;
68 return sample_iteration_;
73 return learning_rate_;
77 if (network_ ==
nullptr) {
81 shape = network_->OutputShape(shape);
102 auto *series =
static_cast<Series *
>(network_);
103 std::vector<std::string> layers;
111 auto *series =
static_cast<Series *
>(network_);
119 auto *series =
static_cast<Series *
>(network_);
122 return learning_rate_;
128 return network_str_.c_str();
144 learning_rate_ *= factor;
146 std::vector<std::string> layers = EnumerateLayers();
147 for (
auto &layer : layers) {
148 ScaleLayerLearningRate(layer, factor);
156 auto *series =
static_cast<Series *
>(network_);
164 learning_rate_ = learning_rate;
166 for (
auto &
id : EnumerateLayers()) {
167 SetLayerLearningRate(
id, learning_rate);
176 auto *series =
static_cast<Series *
>(network_);
183 network_->ConvertToInt();
190 return ccutil_.unicharset;
193 return ccutil_.unicharset;
210 sample_iteration_ = iteration;
214 return network_->NumInputs();
235 bool LoadRecoder(
TFile *fp);
252 void RecognizeLine(
const ImageData &image_data,
float invert_threshold,
bool debug,
double worst_dict_cert,
254 int lstm_choice_amount = 5);
257 void OutputStats(
const NetworkIO &outputs,
float *min_output,
float *mean_output,
float *sd);
267 bool RecognizeLine(
const ImageData &image_data,
float invert_threshold,
bool debug,
bool re_invert,
272 std::string DecodeLabels(
const std::vector<int> &labels);
276 void DisplayForward(
const NetworkIO &inputs,
const std::vector<int> &labels,
277 const std::vector<int> &label_coords,
const char *window_name,
283 void LabelsFromOutputs(
const NetworkIO &outputs, std::vector<int> *labels,
284 std::vector<int> *xcoords);
289 int64_t seed =
static_cast<int64_t
>(sample_iteration_) * 0x10000001;
290 randomizer_.set_seed(seed);
291 randomizer_.IntRand();
296 void DisplayLSTMOutput(
const std::vector<int> &labels,
const std::vector<int> &xcoords,
301 void DebugActivationPath(
const NetworkIO &outputs,
const std::vector<int> &labels,
302 const std::vector<int> &xcoords);
306 void DebugActivationRange(
const NetworkIO &outputs,
const char *label,
int best_choice,
307 int x_start,
int x_end);
311 void LabelsViaReEncode(
const NetworkIO &
output, std::vector<int> *labels,
312 std::vector<int> *xcoords);
316 void LabelsViaSimpleText(
const NetworkIO &
output, std::vector<int> *labels,
317 std::vector<int> *xcoords);
321 const char *DecodeLabel(
const std::vector<int> &labels,
unsigned start,
unsigned *end,
int *decoded);
325 const char *DecodeSingleLabel(
int label);
bool DeSerialize(bool swap, FILE *fp, std::vector< T > &data)
bool Serialize(FILE *fp, const std::vector< T > &data)
LossType OutputLossType() const
void SetLayerLearningRate(const std::string &id, float learning_rate)
UNICHARSET & GetUnicharset()
const UnicharCompress & GetRecoder() const
float GetAdamBeta() const
bool SimpleTextOutput() const
NetworkScratch scratch_space_
bool IsTensorFlow() const
void SetIteration(int iteration)
float GetMomentum() const
RecodeBeamSearch * search_
const Dict * GetDict() const
void ScaleLearningRate(double factor)
void ScaleLayerLearningRate(const std::string &id, double factor)
float learning_rate() const
int32_t training_iteration_
int training_iteration() const
int sample_iteration() const
std::vector< std::string > EnumerateLayers() const
float GetLayerLearningRate(const std::string &id) const
const char * GetNetwork() const
Network * GetLayer(const std::string &id) const
const UNICHARSET & GetUnicharset() const
int32_t sample_iteration_
void SetLearningRate(float learning_rate)
float LayerLearningRate(const char *id)
void EnumerateLayers(const std::string *prefix, std::vector< std::string > &layers) const
void SetLayerLearningRate(const char *id, float learning_rate)
void ScaleLayerLearningRate(const char *id, double factor)
Network * GetLayer(const char *id) const
LossType loss_type() const