vector<int> MultilayerPerceptron::getLayerSizes() { size_t nLayers = layerWeights.size(); vector<int> lsizes(nLayers); for(size_t i = 0; i < nLayers; i++){ lsizes[i] = (layerWeights[i].size()); } return lsizes; }
int setGlobalOffsets() { //only set the global offsets once. if (setGlobalOffsets_) return(0); if (matrixGraph_.get() == NULL) return(-1); MPI_Comm comm = matrixGraph_->getRowSpace()->getCommunicator(); int num_procs = fei::numProcs(comm); int local_proc = fei::localProc(comm); std::vector<int> globalOffsets; std::vector<int> globalBlkOffsets; if (reducer_.get() != NULL) { int localsize = reducer_->getLocalReducedEqns().size(); numLocalEqns_ = localsize; std::vector<int> lsizes(num_procs, 0); std::vector<int> gsizes(num_procs, 0); lsizes[local_proc] = localsize; fei::GlobalMax(comm, lsizes, gsizes); globalOffsets.resize(num_procs+1); int offset = 0; for(int p=0; p<num_procs; ++p) { globalOffsets[p] = offset; offset += gsizes[p]; } globalOffsets[num_procs] = offset; globalBlkOffsets = globalOffsets; } else { fei::SharedPtr<fei::VectorSpace> vecSpace = matrixGraph_->getRowSpace(); vecSpace->getGlobalIndexOffsets(globalOffsets); vecSpace->getGlobalBlkIndexOffsets(globalBlkOffsets); numLocalEqns_ = globalOffsets[local_proc+1]-globalOffsets[local_proc]; } CHK_ERR(linsyscore_->setGlobalOffsets(num_procs+1, &globalBlkOffsets[0], &globalOffsets[0], &globalBlkOffsets[0])); setGlobalOffsets_ = true; return(0); }