40 int stack_size =
stack_.size();
41 for (
int i = 0; i < stack_size; ++i) {
42 result =
stack_[i]->OutputShape(result);
52 tprintf(
"Num outputs,weights in Series:\n");
53 for (
int i = 0; i <
stack_.size(); ++i) {
54 int weights =
stack_[i]->InitWeights(range, randomizer);
67 tprintf(
"Num (Extended) outputs,weights in Series:\n");
68 for (
int i = 0; i <
stack_.size(); ++i) {
69 int weights =
stack_[i]->RemapOutputs(old_no, code_map);
84 for (
int i = 0; i <
stack_.size(); ++i)
86 return needs_backprop;
97 for (
int i = 0; i <
stack_.size(); ++i)
105 stack_[0]->CacheXScaleFactor(factor);
113 int stack_size =
stack_.size();
120 stack_[0]->Forward(debug, input, input_transpose, scratch, buffer1);
121 for (
int i = 1; i < stack_size; i += 2) {
122 stack_[i]->Forward(debug, *buffer1, NULL, scratch,
123 i + 1 < stack_size ? buffer2 : output);
124 if (i + 1 == stack_size)
return;
125 stack_[i + 1]->Forward(debug, *buffer2, NULL, scratch,
126 i + 2 < stack_size ? buffer1 : output);
136 int stack_size =
stack_.size();
143 if (!
stack_.back()->IsTraining() ||
144 !
stack_.back()->Backward(debug, fwd_deltas, scratch, buffer1))
146 for (
int i = stack_size - 2; i >= 0; i -= 2) {
148 !
stack_[i]->Backward(debug, *buffer1, scratch,
149 i > 0 ? buffer2 : back_deltas))
153 !
stack_[i - 1]->Backward(debug, *buffer2, scratch,
154 i > 1 ? buffer1 : back_deltas))
166 if (last_start < 0 || last_start >=
stack_.size()) {
167 tprintf(
"Invalid split index %d must be in range [0,%d]!\n",
168 last_start,
stack_.size() - 1);
173 for (
int s = 0; s <= last_start; ++s) {
182 for (
int s = last_start + 1; s <
stack_.size(); ++s) {
186 *start = master_series;
187 *end = boosted_series;
196 for (
int s = 0; s < src_series->stack_.size(); ++s) {
198 src_series->stack_[s] = NULL;
void AppendSeries(Network *src)
virtual StaticShape OutputShape(const StaticShape &input_shape) const
virtual void CacheXScaleFactor(int factor)
virtual STRING spec() const
virtual void Forward(bool debug, const NetworkIO &input, const TransposedArray *input_transpose, NetworkScratch *scratch, NetworkIO *output)
int RemapOutputs(int old_no, const std::vector< int > &code_map) override
Series(const STRING &name)
void ChangeType(NetworkType type)
void SplitAt(int last_start, Series **start, Series **end)
PointerVector< Network > stack_
virtual int XScaleFactor() const
virtual int InitWeights(float range, TRand *randomizer)
virtual bool SetupNeedsBackprop(bool needs_backprop)
virtual bool Backward(bool debug, const NetworkIO &fwd_deltas, NetworkScratch *scratch, NetworkIO *back_deltas)
virtual void AddToStack(Network *network)