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)
 
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)
 
virtual void Update (float learning_rate, float momentum, int num_samples)
 
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 75 of file plumbing.cpp.

75  {
76  if (stack_.empty()) {
77  ni_ = network->NumInputs();
78  no_ = network->NumOutputs();
79  } else if (type_ == NT_SERIES) {
80  // ni is input of first, no output of last, others match output to input.
81  ASSERT_HOST(no_ == network->NumInputs());
82  no_ = network->NumOutputs();
83  } else {
84  // All parallel types. Output is sum of outputs, inputs all match.
85  ASSERT_HOST(ni_ == network->NumInputs());
86  no_ += network->NumOutputs();
87  }
88  stack_.push_back(network);
89 }
#define ASSERT_HOST(x)
Definition: errcode.h:84
PointerVector< Network > stack_
Definition: plumbing.h:133
NetworkType type_
Definition: network.h:285

◆ CacheXScaleFactor()

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

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 119 of file plumbing.cpp.

119  {
120  for (int i = 0; i < stack_.size(); ++i) {
121  stack_[i]->CacheXScaleFactor(factor);
122  }
123 }
PointerVector< Network > stack_
Definition: plumbing.h:133

◆ ConvertToInt()

void tesseract::Plumbing::ConvertToInt ( )
virtual

Reimplemented from tesseract::Network.

Definition at line 61 of file plumbing.cpp.

61  {
62  for (int i = 0; i < stack_.size(); ++i)
63  stack_[i]->ConvertToInt();
64 }
PointerVector< Network > stack_
Definition: plumbing.h:133
virtual void ConvertToInt()
Definition: plumbing.cpp:61

◆ CountAlternators()

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

Reimplemented from tesseract::Network.

Definition at line 227 of file plumbing.cpp.

228  {
229  ASSERT_HOST(other.type() == type_);
230  const Plumbing* plumbing = static_cast<const Plumbing*>(&other);
231  ASSERT_HOST(plumbing->stack_.size() == stack_.size());
232  for (int i = 0; i < stack_.size(); ++i)
233  stack_[i]->CountAlternators(*plumbing->stack_[i], same, changed);
234 }
Plumbing(const STRING &name)
Definition: plumbing.cpp:25
#define ASSERT_HOST(x)
Definition: errcode.h:84
PointerVector< Network > stack_
Definition: plumbing.h:133
NetworkType type_
Definition: network.h:285
virtual void CountAlternators(const Network &other, double *same, double *changed) const
Definition: plumbing.cpp:227

◆ DebugWeights()

void tesseract::Plumbing::DebugWeights ( )
virtual

Reimplemented from tesseract::Network.

Definition at line 126 of file plumbing.cpp.

126  {
127  for (int i = 0; i < stack_.size(); ++i)
128  stack_[i]->DebugWeights();
129 }
PointerVector< Network > stack_
Definition: plumbing.h:133
virtual void DebugWeights()
Definition: plumbing.cpp:126

◆ DeSerialize()

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

Reimplemented from tesseract::Network.

Definition at line 190 of file plumbing.cpp.

190  {
191  stack_.truncate(0);
192  no_ = 0; // We will be modifying this as we AddToStack.
193  inT32 size;
194  if (fp->FReadEndian(&size, sizeof(size), 1) != 1) return false;
195  for (int i = 0; i < size; ++i) {
196  Network* network = CreateFromFile(fp);
197  if (network == NULL) return false;
198  AddToStack(network);
199  }
202  return false;
203  }
204  return true;
205 }
bool DeSerialize(bool swap, FILE *fp)
int32_t inT32
Definition: host.h:38
voidpf void uLong size
Definition: ioapi.h:39
static Network * CreateFromFile(TFile *fp)
Definition: network.cpp:203
inT32 network_flags_
Definition: network.h:288
PointerVector< Network > stack_
Definition: plumbing.h:133
GenericVector< float > learning_rates_
Definition: plumbing.h:136
virtual void AddToStack(Network *network)
Definition: plumbing.cpp:75

◆ EnumerateLayers()

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

Definition at line 132 of file plumbing.cpp.

133  {
134  for (int i = 0; i < stack_.size(); ++i) {
135  STRING layer_name;
136  if (prefix) layer_name = *prefix;
137  layer_name.add_str_int(":", i);
138  if (stack_[i]->IsPlumbingType()) {
139  Plumbing* plumbing = static_cast<Plumbing*>(stack_[i]);
140  plumbing->EnumerateLayers(&layer_name, layers);
141  } else {
142  layers->push_back(layer_name);
143  }
144  }
145 }
void add_str_int(const char *str, int number)
Definition: strngs.cpp:381
Plumbing(const STRING &name)
Definition: plumbing.cpp:25
int push_back(T object)
PointerVector< Network > stack_
Definition: plumbing.h:133
Definition: strngs.h:45
virtual bool IsPlumbingType() const
Definition: plumbing.h:44

◆ GetLayer()

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

Definition at line 148 of file plumbing.cpp.

148  {
149  char* next_id;
150  int index = strtol(id, &next_id, 10);
151  if (index < 0 || index >= stack_.size()) return NULL;
152  if (stack_[index]->IsPlumbingType()) {
153  Plumbing* plumbing = static_cast<Plumbing*>(stack_[index]);
154  ASSERT_HOST(*next_id == ':');
155  return plumbing->GetLayer(next_id + 1);
156  }
157  return stack_[index];
158 }
Plumbing(const STRING &name)
Definition: plumbing.cpp:25
#define ASSERT_HOST(x)
Definition: errcode.h:84
PointerVector< Network > stack_
Definition: plumbing.h:133
virtual bool IsPlumbingType() const
Definition: plumbing.h:44

◆ 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:133
inT32 num_weights_
Definition: network.h:291

◆ 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:133

◆ 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 102 of file plumbing.h.

102  {
103  const float* lr_ptr = LayerLearningRatePtr(id);
104  ASSERT_HOST(lr_ptr != NULL);
105  return *lr_ptr;
106  }
float * LayerLearningRatePtr(const char *id) const
Definition: plumbing.cpp:161
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ LayerLearningRatePtr()

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

Definition at line 161 of file plumbing.cpp.

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

◆ ScaleLayerLearningRate()

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

Definition at line 108 of file plumbing.h.

108  {
109  float* lr_ptr = LayerLearningRatePtr(id);
110  ASSERT_HOST(lr_ptr != NULL);
111  *lr_ptr *= factor;
112  }
float * LayerLearningRatePtr(const char *id) const
Definition: plumbing.cpp:161
#define ASSERT_HOST(x)
Definition: errcode.h:84

◆ Serialize()

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

Reimplemented from tesseract::Network.

Definition at line 175 of file plumbing.cpp.

175  {
176  if (!Network::Serialize(fp)) return false;
177  inT32 size = stack_.size();
178  // Can't use PointerVector::Serialize here as we need a special DeSerialize.
179  if (fp->FWrite(&size, sizeof(size), 1) != 1) return false;
180  for (int i = 0; i < size; ++i)
181  if (!stack_[i]->Serialize(fp)) return false;
183  !learning_rates_.Serialize(fp)) {
184  return false;
185  }
186  return true;
187 }
int32_t inT32
Definition: host.h:38
voidpf void uLong size
Definition: ioapi.h:39
inT32 network_flags_
Definition: network.h:288
PointerVector< Network > stack_
Definition: plumbing.h:133
bool Serialize(FILE *fp) const
GenericVector< float > learning_rates_
Definition: plumbing.h:136
virtual bool Serialize(TFile *fp) const
Definition: network.cpp:153
virtual bool Serialize(TFile *fp) const
Definition: plumbing.cpp:175

◆ 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
PointerVector< Network > stack_
Definition: plumbing.h:133
virtual void SetEnableTraining(TrainingState state)
Definition: network.cpp:112

◆ 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 }
virtual void SetNetworkFlags(uinT32 flags)
Definition: plumbing.cpp:42
virtual void SetNetworkFlags(uinT32 flags)
Definition: network.cpp:126
PointerVector< Network > stack_
Definition: plumbing.h:133

◆ SetRandomizer()

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

Reimplemented from tesseract::Network.

Definition at line 69 of file plumbing.cpp.

69  {
70  for (int i = 0; i < stack_.size(); ++i)
71  stack_[i]->SetRandomizer(randomizer);
72 }
PointerVector< Network > stack_
Definition: plumbing.h:133
virtual void SetRandomizer(TRand *randomizer)
Definition: plumbing.cpp:69

◆ SetupNeedsBackprop()

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

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 93 of file plumbing.cpp.

93  {
94  if (IsTraining()) {
95  needs_to_backprop_ = needs_backprop;
96  bool retval = needs_backprop;
97  for (int i = 0; i < stack_.size(); ++i) {
98  if (stack_[i]->SetupNeedsBackprop(needs_backprop)) retval = true;
99  }
100  return retval;
101  }
102  // Frozen networks don't do backprop.
103  needs_to_backprop_ = false;
104  return false;
105 }
bool needs_to_backprop_
Definition: network.h:287
bool IsTraining() const
Definition: network.h:115
virtual bool SetupNeedsBackprop(bool needs_backprop)
Definition: plumbing.cpp:93
PointerVector< Network > stack_
Definition: plumbing.h:133

◆ 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 93 of file plumbing.h.

93  {
94  return stack_;
95  }
PointerVector< Network > stack_
Definition: plumbing.h:133

◆ Update()

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

Reimplemented from tesseract::Network.

Definition at line 210 of file plumbing.cpp.

210  {
211  for (int i = 0; i < stack_.size(); ++i) {
213  if (i < learning_rates_.size())
214  learning_rate = learning_rates_[i];
215  else
216  learning_rates_.push_back(learning_rate);
217  }
218  if (stack_[i]->IsTraining()) {
219  stack_[i]->Update(learning_rate, momentum, num_samples);
220  }
221  }
222 }
int push_back(T object)
bool IsTraining() const
Definition: network.h:115
int size() const
Definition: genericvector.h:72
inT32 network_flags_
Definition: network.h:288
PointerVector< Network > stack_
Definition: plumbing.h:133
GenericVector< float > learning_rates_
Definition: plumbing.h:136

◆ XScaleFactor()

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

Reimplemented from tesseract::Network.

Reimplemented in tesseract::Series.

Definition at line 113 of file plumbing.cpp.

113  {
114  return stack_[0]->XScaleFactor();
115 }
PointerVector< Network > stack_
Definition: plumbing.h:133

Member Data Documentation

◆ learning_rates_

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

Definition at line 136 of file plumbing.h.

◆ stack_

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

Definition at line 133 of file plumbing.h.


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