Tesseract
3.02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
neuron.h
Go to the documentation of this file.
1
// Copyright 2008 Google Inc.
2
// All Rights Reserved.
3
// Author: ahmadab@google.com (Ahmad Abdulkader)
4
//
5
// neuron.h: Declarations of a class for an object that
6
// represents a single neuron in a neural network
7
//
8
9
#ifndef NEURON_H
10
#define NEURON_H
11
12
#include <math.h>
13
#include <vector>
14
15
#ifdef USE_STD_NAMESPACE
16
using
std::vector;
17
#endif
18
19
namespace
tesseract
{
20
21
// Input Node bias values
22
static
const
float
kInputNodeBias = 0.0f;
23
24
class
Neuron
{
25
public
:
26
// Types of nodes
27
enum
NeuronTypes
{
28
Unknown
= 0,
29
Input
,
30
Hidden
,
31
Output
32
};
33
Neuron
();
34
~Neuron
();
35
// set the forward dirty flag indicating that the
36
// activation of the net is not fresh
37
void
Clear
() {
38
frwd_dirty_
=
true
;
39
}
40
// Read a binary representation of the neuron info from
41
// an input buffer.
42
template
<
class
BuffType>
bool
ReadBinary
(BuffType *input_buff) {
43
float
val;
44
if
(input_buff->Read(&val,
sizeof
(val)) !=
sizeof
(val)) {
45
return
false
;
46
}
47
// input nodes should have no biases
48
if
(
node_type_
==
Input
) {
49
bias_
= kInputNodeBias;
50
}
else
{
51
bias_
= val;
52
}
53
// read fanin count
54
int
fan_in_cnt
;
55
if
(input_buff->Read(&fan_in_cnt,
sizeof
(fan_in_cnt)) !=
56
sizeof
(
fan_in_cnt
)) {
57
return
false
;
58
}
59
// validate fan-in cnt
60
if
(fan_in_cnt !=
fan_in_
.size()) {
61
return
false
;
62
}
63
// read the weights
64
for
(
int
in = 0; in <
fan_in_cnt
; in++) {
65
if
(input_buff->Read(&val,
sizeof
(val)) !=
sizeof
(val)) {
66
return
false
;
67
}
68
*(
fan_in_weights_
[in]) = val;
69
}
70
return
true
;
71
}
72
73
// Add a new connection from this neuron *From*
74
// a target neuron using specfied params
75
// Note that what is actually copied in this function are pointers to the
76
// specified Neurons and weights and not the actualt values. This is by
77
// design to centralize the alloction of neurons and weights and so
78
// increase the locality of reference and improve cache-hits resulting
79
// in a faster net. This technique resulted in a 2X-10X speedup
80
// (depending on network size and processor)
81
void
AddFromConnection
(
Neuron
*neuron_vec,
82
float
*wts_offset,
83
int
from_cnt);
84
// Set the type of a neuron
85
void
set_node_type
(
NeuronTypes
type);
86
// Computes the output of the node by
87
// "pulling" the output of the fan-in nodes
88
void
FeedForward
();
89
// fast computation of sigmoid function using a lookup table
90
// defined in sigmoid_table.cpp
91
static
float
Sigmoid
(
float
activation);
92
// Accessor functions
93
float
output
()
const
{
94
return
output_
;
95
}
96
void
set_output
(
float
out_val) {
97
output_
= out_val;
98
}
99
int
id
()
const
{
100
return
id_
;
101
}
102
int
fan_in_cnt
()
const
{
103
return
fan_in_
.size();
104
}
105
Neuron
*
fan_in
(
int
idx)
const
{
106
return
fan_in_
[idx];
107
}
108
float
fan_in_wts
(
int
idx)
const
{
109
return
*(
fan_in_weights_
[idx]);
110
}
111
void
set_id
(
int
id
) {
112
id_
=
id
;
113
}
114
float
bias
()
const
{
115
return
bias_
;
116
}
117
Neuron::NeuronTypes
node_type
()
const
{
118
return
node_type_
;
119
}
120
121
protected
:
122
// Type of Neuron
123
NeuronTypes
node_type_
;
124
// unqique id of the neuron
125
int
id_
;
126
// node bias
127
float
bias_
;
128
// node net activation
129
float
activation_
;
130
// node output
131
float
output_
;
132
// pointers to fanin nodes
133
vector<Neuron *>
fan_in_
;
134
// pointers to fanin weights
135
vector<float *>
fan_in_weights_
;
136
// Sigmoid function lookup table used for fast computation
137
// of sigmoid function
138
static
const
float
kSigmoidTable
[];
139
// flag determining if the activation of the node
140
// is fresh or not (dirty)
141
bool
frwd_dirty_
;
142
// Initializer
143
void
Init
();
144
};
145
}
146
147
#endif // NEURON_H__
mnt
data
src
tesseract-ocr
neural_networks
runtime
neuron.h
Generated on Thu Nov 1 2012 20:19:49 for Tesseract by
1.8.1