tesseract  4.00.00dev
tesseract::Plumbing Class Reference

#include <plumbing.h>

Inheritance diagram for tesseract::Plumbing:
tesseract::Network tesseract::Parallel tesseract::Reversed tesseract::Series

Public Member Functions

 Plumbing (const STRING &name)
 
virtual ~Plumbing ()
 
virtual StaticShape InputShape () const
 
virtual STRING spec () const
 
virtual bool IsPlumbingType () const
 
virtual void SetEnableTraining (TrainingState state)
 
virtual void SetNetworkFlags (uinT32 flags)
 
virtual int InitWeights (float range, TRand *randomizer)
 
int RemapOutputs (int old_no, const std::vector< int > &code_map) override
 
virtual void ConvertToInt ()
 
virtual void SetRandomizer (TRand *randomizer)
 
virtual void AddToStack (Network *network)
 
virtual bool SetupNeedsBackprop (bool needs_backprop)
 
virtual int XScaleFactor () const
 
virtual void CacheXScaleFactor (int factor)
 
virtual void DebugWeights ()
 
const PointerVector< Network > & stack () const
 
void EnumerateLayers (const STRING *prefix, GenericVector< STRING > *layers) const
 
NetworkGetLayer (const char *id) const
 
float LayerLearningRate (const char *id) const
 
void ScaleLayerLearningRate (const char *id, double factor)
 
float * LayerLearningRatePtr (const char *id) const
 
virtual bool Serialize (TFile *fp) const
 
virtual bool DeSerialize (TFile *fp)
 
void Update (float learning_rate, float momentum, float adam_beta, int num_samples) override
 
virtual void CountAlternators (const Network &other, double *same, double *changed) const
 
- Public Member Functions inherited from tesseract::Network
 Network ()
 
 Network (NetworkType type, const STRING &name, int ni, int no)
 
virtual ~Network ()
 
NetworkType type () const
 
bool IsTraining () const
 
bool needs_to_backprop () const
 
int num_weights () const
 
int NumInputs () const
 
int NumOutputs () const
 
virtual StaticShape OutputShape (const StaticShape &input_shape) const
 
const STRINGname () const
 
bool TestFlag (NetworkFlags flag) const
 
virtual void Forward (bool debug, const NetworkIO &input, const TransposedArray *input_transpose, NetworkScratch *scratch, NetworkIO *output)
 
virtual bool Backward (bool debug, const NetworkIO &fwd_deltas, NetworkScratch *scratch, NetworkIO *back_deltas)
 
void DisplayForward (const NetworkIO &matrix)
 
void DisplayBackward (const NetworkIO &matrix)
 

Protected Attributes

PointerVector< Networkstack_
 
GenericVector< float > learning_rates_
 
- Protected Attributes inherited from tesseract::Network
NetworkType type_
 
TrainingState training_
 
bool needs_to_backprop_
 
inT32 network_flags_
 
inT32 ni_
 
inT32 no_
 
inT32 num_weights_
 
STRING name_
 
ScrollViewforward_win_
 
ScrollViewbackward_win_
 
TRandrandomizer_
 

Additional Inherited Members

- Static Public Member Functions inherited from tesseract::Network
static NetworkCreateFromFile (TFile *fp)
 
static void ClearWindow (bool tess_coords, const char *window_name, int width, int height, ScrollView **window)
 
static int DisplayImage (Pix *pix, ScrollView *window)
 
- Protected Member Functions inherited from tesseract::Network
double Random (double range)
 
- Static Protected Attributes inherited from tesseract::Network
static char const *const kTypeNames [NT_COUNT]
 

Detailed Description

Definition at line 30 of file plumbing.h.

Constructor & Destructor Documentation

◆ Plumbing()

tesseract::Plumbing::Plumbing ( const STRING name)
explicit

Definition at line 25 of file plumbing.cpp.

26  : Network(NT_PARALLEL, name, 0, 0) {
27 }

◆ ~Plumbing()

tesseract::Plumbing::~Plumbing ( )
virtual

Definition at line 29 of file plumbing.cpp.

29  {
30 }

Member Function Documentation

◆ AddToStack()

void tesseract::Plumbing::AddToStack ( Network network)
virtual

Definition at line 85 of file plumbing.cpp.

85  {
86  if (stack_.empty()) {
87  ni_ = network->NumInputs();
88  no_ = network->NumOutputs();
89  } else if (type_ == NT_SERIES) {
90  // ni is input of first, no output of last, others match output to input.
91  ASSERT_HOST(no_ == network->NumInputs());
92  no_ = network->NumOutputs();
93  } else {
94  // All parallel types. Output is sum of outputs, inputs all match.
95  ASSERT_HOST(ni_ == network->NumInputs());
96  no_ += network->NumOutputs();
97  }
98  stack_.push_back(network);
99 }
NetworkType type_
Definition: network.h:299
PointerVector< Network > stack_
Definition: plumbing.h:136
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ CacheXScaleFactor()

void tesseract::Plumbing::CacheXScaleFactor ( int  factor)
virtual

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 129 of file plumbing.cpp.

129  {
130  for (int i = 0; i < stack_.size(); ++i) {
131  stack_[i]->CacheXScaleFactor(factor);
132  }
133 }
PointerVector< Network > stack_
Definition: plumbing.h:136

◆ ConvertToInt()

void tesseract::Plumbing::ConvertToInt ( )
virtual

Reimplemented from tesseract::Network.

Definition at line 71 of file plumbing.cpp.

71  {
72  for (int i = 0; i < stack_.size(); ++i)
73  stack_[i]->ConvertToInt();
74 }
PointerVector< Network > stack_
Definition: plumbing.h:136
virtual void ConvertToInt()
Definition: plumbing.cpp:71

◆ CountAlternators()

void tesseract::Plumbing::CountAlternators ( const Network other,
double *  same,
double *  changed 
) const
virtual

Reimplemented from tesseract::Network.

Definition at line 237 of file plumbing.cpp.

238  {
239  ASSERT_HOST(other.type() == type_);
240  const Plumbing* plumbing = static_cast<const Plumbing*>(&other);
241  ASSERT_HOST(plumbing->stack_.size() == stack_.size());
242  for (int i = 0; i < stack_.size(); ++i)
243  stack_[i]->CountAlternators(*plumbing->stack_[i], same, changed);
244 }
virtual void CountAlternators(const Network &other, double *same, double *changed) const
Definition: plumbing.cpp:237
NetworkType type_
Definition: network.h:299
Plumbing(const STRING &name)
Definition: plumbing.cpp:25
PointerVector< Network > stack_
Definition: plumbing.h:136
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ DebugWeights()

void tesseract::Plumbing::DebugWeights ( )
virtual

Reimplemented from tesseract::Network.

Definition at line 136 of file plumbing.cpp.

136  {
137  for (int i = 0; i < stack_.size(); ++i)
138  stack_[i]->DebugWeights();
139 }
PointerVector< Network > stack_
Definition: plumbing.h:136
virtual void DebugWeights()
Definition: plumbing.cpp:136

◆ DeSerialize()

bool tesseract::Plumbing::DeSerialize ( TFile fp)
virtual

Reimplemented from tesseract::Network.

Definition at line 200 of file plumbing.cpp.

200  {
201  stack_.truncate(0);
202  no_ = 0; // We will be modifying this as we AddToStack.
203  inT32 size;
204  if (fp->FReadEndian(&size, sizeof(size), 1) != 1) return false;
205  for (int i = 0; i < size; ++i) {
206  Network* network = CreateFromFile(fp);
207  if (network == NULL) return false;
208  AddToStack(network);
209  }
212  return false;
213  }
214  return true;
215 }
PointerVector< Network > stack_
Definition: plumbing.h:136
int32_t inT32
Definition: host.h:38
bool DeSerialize(bool swap, FILE *fp)
static Network * CreateFromFile(TFile *fp)
Definition: network.cpp:203
inT32 network_flags_
Definition: network.h:302
GenericVector< float > learning_rates_
Definition: plumbing.h:139
virtual void AddToStack(Network *network)
Definition: plumbing.cpp:85

◆ EnumerateLayers()

void tesseract::Plumbing::EnumerateLayers ( const STRING prefix,
GenericVector< STRING > *  layers 
) const

Definition at line 142 of file plumbing.cpp.

143  {
144  for (int i = 0; i < stack_.size(); ++i) {
145  STRING layer_name;
146  if (prefix) layer_name = *prefix;
147  layer_name.add_str_int(":", i);
148  if (stack_[i]->IsPlumbingType()) {
149  Plumbing* plumbing = static_cast<Plumbing*>(stack_[i]);
150  plumbing->EnumerateLayers(&layer_name, layers);
151  } else {
152  layers->push_back(layer_name);
153  }
154  }
155 }
void add_str_int(const char *str, int number)
Definition: strngs.cpp:381
Plumbing(const STRING &name)
Definition: plumbing.cpp:25
PointerVector< Network > stack_
Definition: plumbing.h:136
virtual bool IsPlumbingType() const
Definition: plumbing.h:44
int push_back(T object)
Definition: strngs.h:45

◆ GetLayer()

Network * tesseract::Plumbing::GetLayer ( const char *  id) const

Definition at line 158 of file plumbing.cpp.

158  {
159  char* next_id;
160  int index = strtol(id, &next_id, 10);
161  if (index < 0 || index >= stack_.size()) return NULL;
162  if (stack_[index]->IsPlumbingType()) {
163  Plumbing* plumbing = static_cast<Plumbing*>(stack_[index]);
164  ASSERT_HOST(*next_id == ':');
165  return plumbing->GetLayer(next_id + 1);
166  }
167  return stack_[index];
168 }
Plumbing(const STRING &name)
Definition: plumbing.cpp:25
PointerVector< Network > stack_
Definition: plumbing.h:136
virtual bool IsPlumbingType() const
Definition: plumbing.h:44
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ InitWeights()

int tesseract::Plumbing::InitWeights ( float  range,
TRand randomizer 
)
virtual

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 53 of file plumbing.cpp.

53  {
54  num_weights_ = 0;
55  for (int i = 0; i < stack_.size(); ++i)
56  num_weights_ += stack_[i]->InitWeights(range, randomizer);
57  return num_weights_;
58 }
virtual int InitWeights(float range, TRand *randomizer)
Definition: plumbing.cpp:53
PointerVector< Network > stack_
Definition: plumbing.h:136
inT32 num_weights_
Definition: network.h:305

◆ InputShape()

virtual StaticShape tesseract::Plumbing::InputShape ( ) const
inlinevirtual

Reimplemented from tesseract::Network.

Definition at line 37 of file plumbing.h.

37 { return stack_[0]->InputShape(); }
PointerVector< Network > stack_
Definition: plumbing.h:136

◆ IsPlumbingType()

virtual bool tesseract::Plumbing::IsPlumbingType ( ) const
inlinevirtual

Reimplemented from tesseract::Network.

Definition at line 44 of file plumbing.h.

44 { return true; }

◆ LayerLearningRate()

float tesseract::Plumbing::LayerLearningRate ( const char *  id) const
inline

Definition at line 105 of file plumbing.h.

105  {
106  const float* lr_ptr = LayerLearningRatePtr(id);
107  ASSERT_HOST(lr_ptr != NULL);
108  return *lr_ptr;
109  }
float * LayerLearningRatePtr(const char *id) const
Definition: plumbing.cpp:171
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ LayerLearningRatePtr()

float * tesseract::Plumbing::LayerLearningRatePtr ( const char *  id) const

Definition at line 171 of file plumbing.cpp.

171  {
172  char* next_id;
173  int index = strtol(id, &next_id, 10);
174  if (index < 0 || index >= stack_.size()) return NULL;
175  if (stack_[index]->IsPlumbingType()) {
176  Plumbing* plumbing = static_cast<Plumbing*>(stack_[index]);
177  ASSERT_HOST(*next_id == ':');
178  return plumbing->LayerLearningRatePtr(next_id + 1);
179  }
180  if (index < 0 || index >= learning_rates_.size()) return NULL;
181  return &learning_rates_[index];
182 }
int size() const
Definition: genericvector.h:72
Plumbing(const STRING &name)
Definition: plumbing.cpp:25
PointerVector< Network > stack_
Definition: plumbing.h:136
virtual bool IsPlumbingType() const
Definition: plumbing.h:44
#define ASSERT_HOST(x)
Definition: errcode.h:84
GenericVector< float > learning_rates_
Definition: plumbing.h:139

◆ RemapOutputs()

int tesseract::Plumbing::RemapOutputs ( int  old_no,
const std::vector< int > &  code_map 
)
overridevirtual

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 62 of file plumbing.cpp.

62  {
63  num_weights_ = 0;
64  for (int i = 0; i < stack_.size(); ++i) {
65  num_weights_ += stack_[i]->RemapOutputs(old_no, code_map);
66  }
67  return num_weights_;
68 }
PointerVector< Network > stack_
Definition: plumbing.h:136
inT32 num_weights_
Definition: network.h:305

◆ ScaleLayerLearningRate()

void tesseract::Plumbing::ScaleLayerLearningRate ( const char *  id,
double  factor 
)
inline

Definition at line 111 of file plumbing.h.

111  {
112  float* lr_ptr = LayerLearningRatePtr(id);
113  ASSERT_HOST(lr_ptr != NULL);
114  *lr_ptr *= factor;
115  }
float * LayerLearningRatePtr(const char *id) const
Definition: plumbing.cpp:171
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ Serialize()

bool tesseract::Plumbing::Serialize ( TFile fp) const
virtual

Reimplemented from tesseract::Network.

Definition at line 185 of file plumbing.cpp.

185  {
186  if (!Network::Serialize(fp)) return false;
187  inT32 size = stack_.size();
188  // Can't use PointerVector::Serialize here as we need a special DeSerialize.
189  if (fp->FWrite(&size, sizeof(size), 1) != 1) return false;
190  for (int i = 0; i < size; ++i)
191  if (!stack_[i]->Serialize(fp)) return false;
193  !learning_rates_.Serialize(fp)) {
194  return false;
195  }
196  return true;
197 }
virtual bool Serialize(TFile *fp) const
Definition: network.cpp:153
virtual bool Serialize(TFile *fp) const
Definition: plumbing.cpp:185
PointerVector< Network > stack_
Definition: plumbing.h:136
bool Serialize(FILE *fp) const
int32_t inT32
Definition: host.h:38
inT32 network_flags_
Definition: network.h:302
GenericVector< float > learning_rates_
Definition: plumbing.h:139

◆ SetEnableTraining()

void tesseract::Plumbing::SetEnableTraining ( TrainingState  state)
virtual

Reimplemented from tesseract::Network.

Definition at line 34 of file plumbing.cpp.

34  {
36  for (int i = 0; i < stack_.size(); ++i)
37  stack_[i]->SetEnableTraining(state);
38 }
virtual void SetEnableTraining(TrainingState state)
Definition: plumbing.cpp:34
virtual void SetEnableTraining(TrainingState state)
Definition: network.cpp:112
PointerVector< Network > stack_
Definition: plumbing.h:136

◆ SetNetworkFlags()

void tesseract::Plumbing::SetNetworkFlags ( uinT32  flags)
virtual

Reimplemented from tesseract::Network.

Definition at line 42 of file plumbing.cpp.

42  {
44  for (int i = 0; i < stack_.size(); ++i)
45  stack_[i]->SetNetworkFlags(flags);
46 }
PointerVector< Network > stack_
Definition: plumbing.h:136
virtual void SetNetworkFlags(uinT32 flags)
Definition: network.cpp:126
virtual void SetNetworkFlags(uinT32 flags)
Definition: plumbing.cpp:42

◆ SetRandomizer()

void tesseract::Plumbing::SetRandomizer ( TRand randomizer)
virtual

Reimplemented from tesseract::Network.

Definition at line 79 of file plumbing.cpp.

79  {
80  for (int i = 0; i < stack_.size(); ++i)
81  stack_[i]->SetRandomizer(randomizer);
82 }
virtual void SetRandomizer(TRand *randomizer)
Definition: plumbing.cpp:79
PointerVector< Network > stack_
Definition: plumbing.h:136

◆ SetupNeedsBackprop()

bool tesseract::Plumbing::SetupNeedsBackprop ( bool  needs_backprop)
virtual

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 103 of file plumbing.cpp.

103  {
104  if (IsTraining()) {
105  needs_to_backprop_ = needs_backprop;
106  bool retval = needs_backprop;
107  for (int i = 0; i < stack_.size(); ++i) {
108  if (stack_[i]->SetupNeedsBackprop(needs_backprop)) retval = true;
109  }
110  return retval;
111  }
112  // Frozen networks don't do backprop.
113  needs_to_backprop_ = false;
114  return false;
115 }
bool IsTraining() const
Definition: network.h:115
PointerVector< Network > stack_
Definition: plumbing.h:136
virtual bool SetupNeedsBackprop(bool needs_backprop)
Definition: plumbing.cpp:103
bool needs_to_backprop_
Definition: network.h:301

◆ spec()

virtual STRING tesseract::Plumbing::spec ( ) const
inlinevirtual

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Parallel, tesseract::Reversed, and tesseract::Series.

Definition at line 38 of file plumbing.h.

38  {
39  return "Sub-classes of Plumbing must implement spec()!";
40  }

◆ stack()

const PointerVector<Network>& tesseract::Plumbing::stack ( ) const
inline

Definition at line 96 of file plumbing.h.

96  {
97  return stack_;
98  }
PointerVector< Network > stack_
Definition: plumbing.h:136

◆ Update()

void tesseract::Plumbing::Update ( float  learning_rate,
float  momentum,
float  adam_beta,
int  num_samples 
)
overridevirtual

Reimplemented from tesseract::Network.

Definition at line 219 of file plumbing.cpp.

220  {
221  for (int i = 0; i < stack_.size(); ++i) {
223  if (i < learning_rates_.size())
224  learning_rate = learning_rates_[i];
225  else
226  learning_rates_.push_back(learning_rate);
227  }
228  if (stack_[i]->IsTraining()) {
229  stack_[i]->Update(learning_rate, momentum, adam_beta, num_samples);
230  }
231  }
232 }
int size() const
Definition: genericvector.h:72
bool IsTraining() const
Definition: network.h:115
PointerVector< Network > stack_
Definition: plumbing.h:136
int push_back(T object)
inT32 network_flags_
Definition: network.h:302
GenericVector< float > learning_rates_
Definition: plumbing.h:139

◆ XScaleFactor()

int tesseract::Plumbing::XScaleFactor ( ) const
virtual

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 123 of file plumbing.cpp.

123  {
124  return stack_[0]->XScaleFactor();
125 }
PointerVector< Network > stack_
Definition: plumbing.h:136

Member Data Documentation

◆ learning_rates_

GenericVector<float> tesseract::Plumbing::learning_rates_
protected

Definition at line 139 of file plumbing.h.

◆ stack_

PointerVector<Network> tesseract::Plumbing::stack_
protected

Definition at line 136 of file plumbing.h.


The documentation for this class was generated from the following files: