36 int stack_size =
stack_.size();
37 for (
int i = 0;
i < stack_size; ++
i) {
38 result =
stack_[
i]->OutputShape(result);
48 tprintf(
"Num outputs,weights in Series:\n");
50 int weights =
i->InitWeights(range, randomizer);
51 tprintf(
" %s:%d, %d\n",
i->spec().c_str(),
i->NumOutputs(), weights);
62 tprintf(
"Num (Extended) outputs,weights in Series:\n");
64 int weights =
i->RemapOutputs(old_no, code_map);
65 tprintf(
" %s:%d, %d\n",
i->spec().c_str(),
i->NumOutputs(), weights);
79 needs_backprop =
i->SetupNeedsBackprop(needs_backprop);
81 return needs_backprop;
93 factor *=
i->XScaleFactor();
101 stack_[0]->CacheXScaleFactor(factor);
108 int stack_size =
stack_.size();
115 stack_[0]->Forward(debug, input, input_transpose, scratch, buffer1);
116 for (
int i = 1;
i < stack_size;
i += 2) {
117 stack_[
i]->Forward(debug, *buffer1,
nullptr, scratch,
i + 1 < stack_size ? buffer2 :
output);
118 if (
i + 1 == stack_size) {
121 stack_[
i + 1]->Forward(debug, *buffer2,
nullptr, scratch,
122 i + 2 < stack_size ? buffer1 :
output);
133 int stack_size =
stack_.size();
140 if (!
stack_.back()->IsTraining() ||
141 !
stack_.back()->Backward(debug, fwd_deltas, scratch, buffer1)) {
144 for (
int i = stack_size - 2;
i >= 0;
i -= 2) {
146 !
stack_[
i]->
Backward(debug, *buffer1, scratch,
i > 0 ? buffer2 : back_deltas)) {
153 !
stack_[
i - 1]->
Backward(debug, *buffer2, scratch,
i > 1 ? buffer1 : back_deltas)) {
166 if (last_start >=
stack_.size()) {
167 tprintf(
"Invalid split index %u must be in range [0,%zu]!\n", last_start,
stack_.size() - 1);
170 auto *master_series =
new Series(
"MasterSeries");
171 auto *boosted_series =
new Series(
"BoostedSeries");
172 for (
unsigned s = 0; s <= last_start; ++s) {
178 master_series->AddToStack(
stack_[s]);
181 for (
unsigned s = last_start + 1; s <
stack_.size(); ++s) {
182 boosted_series->AddToStack(
stack_[s]);
185 *start = master_series;
186 *end = boosted_series;
194 auto *src_series =
static_cast<Series *
>(src);
195 for (
auto &s : src_series->stack_) {
void tprintf(const char *format,...)
void ChangeType(NetworkType type)
virtual void AddToStack(Network *network)
std::vector< Network * > stack_
bool SetupNeedsBackprop(bool needs_backprop) override
bool Backward(bool debug, const NetworkIO &fwd_deltas, NetworkScratch *scratch, NetworkIO *back_deltas) override
TESS_API void AppendSeries(Network *src)
TESS_API Series(const char *name)
int XScaleFactor() const override
TESS_API void SplitAt(unsigned last_start, Series **start, Series **end)
StaticShape OutputShape(const StaticShape &input_shape) const override
void CacheXScaleFactor(int factor) override
int InitWeights(float range, TRand *randomizer) override
int RemapOutputs(int old_no, const std::vector< int > &code_map) override
void Forward(bool debug, const NetworkIO &input, const TransposedArray *input_transpose, NetworkScratch *scratch, NetworkIO *output) override