vector<int> get_out_coords(const vector<int> &inCoords) { vector<int> outCoords; assert(inCoords.size() == activeDims.size()); for (int i = 0; i < inCoords.size(); ++i) { if (activeDims[i]) { outCoords += inCoords[i]; } } assert(outCoords.size() == num_seq_dims()); return outCoords; }
virtual void print(ostream& out = cout) const { out << typeid(*this).name() << " "; Named::print(out); out << " " << num_seq_dims() << "D"; if (directions.size()) { out << " ("; LOOP(int d, directions) { out << ((d > 0) ? "+" : "-"); } out << ")"; }
virtual void start_sequence() { outSeqShape.clear(); for (int i = 0; i < activeDims.size(); ++i) { if (activeDims[i]) { outSeqShape += source->output_seq_shape()[i]; } } assert(outSeqShape.size() == num_seq_dims()); inputActivations.reshape(source->output_seq_shape(), 0); outputActivations.reshape(outSeqShape, 0); reshape_errors(); }