/** * @timef */ int PlasticConnTestProbe::outputState(double timed) { HyPerConn * c = getTargetHyPerConn(); InterColComm * icComm = c->getParent()->icCommunicator(); const int rcvProc = 0; if( icComm->commRank() != rcvProc ) { return PV_SUCCESS; } assert(getTargetConn()!=NULL); outputStream->printf(" Time %f, connection \"%s\":\n", timed, getTargetName()); const pvwdata_t * w = c->get_wDataHead(getArbor(), getKernelIndex()); const pvdata_t * dw = c->get_dwDataHead(getArbor(), getKernelIndex()); if( getOutputPlasticIncr() && dw == NULL ) { pvError().printf("PlasticConnTestProbe \"%s\": connection \"%s\" has dKernelData(%d,%d) set to null.\n", getName(), getTargetName(), getKernelIndex(), getArbor()); } int nxp = c->xPatchSize(); int nyp = c->yPatchSize(); int nfp = c->fPatchSize(); int status = PV_SUCCESS; for( int k=0; k<nxp*nyp*nfp; k++ ) { int x=kxPos(k,nxp,nyp,nfp); int wx = (nxp-1)/2 - x; // assumes connection is one-to-one if(getOutputWeights()) { pvdata_t wCorrect = timed*wx; pvdata_t wObserved = w[k]; if( fabs( ((double) (wObserved - wCorrect))/timed ) > 1e-4 ) { int y=kyPos(k,nxp,nyp,nfp); int f=featureIndex(k,nxp,nyp,nfp); outputStream->printf(" index %d (x=%d, y=%d, f=%d: w = %f, should be %f\n", k, x, y, f, wObserved, wCorrect); } } if(timed > 0 && getOutputPlasticIncr() && dw != NULL) { pvdata_t dwCorrect = wx; pvdata_t dwObserved = dw[k]; if( dwObserved != dwCorrect ) { int y=kyPos(k,nxp,nyp,nfp); int f=featureIndex(k,nxp,nyp,nfp); outputStream->printf(" index %d (x=%d, y=%d, f=%d: dw = %f, should be %f\n", k, x, y, f, dwObserved, dwCorrect); } } } assert(status==PV_SUCCESS); if( status == PV_SUCCESS ) { if (getOutputWeights()) { outputStream->printf(" All weights are correct.\n"); } if (getOutputPlasticIncr()) { outputStream->printf(" All plastic increments are correct.\n"); } } if(getOutputPatchIndices()) { patchIndices(c); } return PV_SUCCESS; }
int customexit(HyPerCol * hc, int argc, char ** argv) { BaseConnection * baseConn; baseConn = hc->getConnFromName("initializeFromInitWeights"); HyPerConn * initializeFromInitWeightsConn = dynamic_cast<HyPerConn *>(baseConn); // There must be a connection named initializeFromInitWeights. It should have a single weight with value 1 assert(initializeFromInitWeightsConn); assert(initializeFromInitWeightsConn->xPatchSize()==1); assert(initializeFromInitWeightsConn->yPatchSize()==1); assert(initializeFromInitWeightsConn->fPatchSize()==1); assert(initializeFromInitWeightsConn->numberOfAxonalArborLists()==1); assert(initializeFromInitWeightsConn->get_wData(0,0)[0] == 1.0f); // There must be a connection named initializeFromCheckpoint. It should have a single weight with value 2 baseConn = hc->getConnFromName("initializeFromCheckpoint"); HyPerConn * initializeFromCheckpointConn = dynamic_cast<HyPerConn *>(baseConn); assert(initializeFromCheckpointConn); assert(initializeFromCheckpointConn->xPatchSize()==1); assert(initializeFromCheckpointConn->yPatchSize()==1); assert(initializeFromCheckpointConn->fPatchSize()==1); assert(initializeFromCheckpointConn->numberOfAxonalArborLists()==1); assert(initializeFromCheckpointConn->get_wData(0,0)[0] == 2.0f); return PV_SUCCESS; }
/** * @timef */ int MomentumConnTestProbe::outputState(double timed) { HyPerConn * c = getTargetHyPerConn(); InterColComm * icComm = c->getParent()->icCommunicator(); const int rcvProc = 0; if( icComm->commRank() != rcvProc ) { return PV_SUCCESS; } assert(getTargetConn()!=NULL); FILE * fp = getStream()->fp; fprintf(fp, " Time %f, connection \"%s\":\n", timed, getTargetName()); const pvwdata_t * w = c->get_wDataHead(getArbor(), getKernelIndex()); const pvdata_t * dw = c->get_dwDataHead(getArbor(), getKernelIndex()); if( getOutputPlasticIncr() && dw == NULL ) { fprintf(stderr, "MomentumConnTestProbe \"%s\": connection \"%s\" has dKernelData(%d,%d) set to null.\n", getName(), getTargetName(), getKernelIndex(), getArbor()); assert(false); } int nxp = c->xPatchSize(); int nyp = c->yPatchSize(); int nfp = c->fPatchSize(); int status = PV_SUCCESS; for( int k=0; k<nxp*nyp*nfp; k++ ) { pvdata_t wObserved = w[k]; //Pulse happens at time 3 pvdata_t wCorrect; if(timed < 3){ wCorrect = 0; } else{ if(isViscosity){ wCorrect = 1; for(int i = 0; i < (timed - 3); i++){ wCorrect += exp(-(2*(i+1))); } } else{ wCorrect = 2 - pow(2, -(timed - 3)); } } if( fabs( ((double) (wObserved - wCorrect))/timed ) > 1e-4 ) { int y=kyPos(k,nxp,nyp,nfp); int f=featureIndex(k,nxp,nyp,nfp); fprintf(fp, " w = %f, should be %f\n", wObserved, wCorrect); exit(-1); } } return PV_SUCCESS; }
int main(int argc, char* argv[]) { int status = 0; PV_Init* initObj = new PV_Init(&argc, &argv); initObj->initialize(argc, argv); // create the managing hypercolumn // HyPerCol* hc = new HyPerCol("test_constant_input column", argc, argv, initObj); // create the image // TestImage * image = new TestImage("test_constant_input image", hc); // create the layers // HyPerLayer * retina = new Retina("test_constant_input retina", hc); // create the connections // HyPerConn * conn = new HyPerConn("test_constant_input connection", hc); const int nxp = conn->xPatchSize(); const int nyp = conn->yPatchSize(); const PVLayerLoc * imageLoc = image->getLayerLoc(); const PVLayerLoc * retinaLoc = image->getLayerLoc(); const int nfPre = imageLoc->nf; float sumOfWeights = (float) (nxp*nyp*nfPre); if (imageLoc->nx > retinaLoc->nx) { sumOfWeights *= imageLoc->nx/retinaLoc->nx;} if (imageLoc->ny > retinaLoc->ny) { sumOfWeights *= imageLoc->ny/retinaLoc->ny;} hc->run(); const int rank = hc->columnId(); #ifdef DEBUG_OUTPUT printf("[%d]: column: ", rank); printLoc(hc->getImageLoc()); printf("[%d]: image : ", rank); printLoc(image->getImageLoc()); printf("[%d]: retina: ", rank); printLoc(*retina->getLayerLoc()); printf("[%d]: l1 : ", rank); printLoc(*l1->getLayerLoc()); #endif status = checkLoc(hc, image->getLayerLoc()); if (status != PV_SUCCESS) { fprintf(stderr, "[%d]: test_constant_input: ERROR in image loc\n", rank); exit(status); } status = checkLoc(hc, retina->getLayerLoc()); if (status != PV_SUCCESS) { fprintf(stderr, "[%d]: test_constant_input: ERROR in retina loc\n", rank); exit(status); } status = checkInput(image->getLayerLoc(), image->getActivity(), image->getConstantVal(), true); if (status != PV_SUCCESS) { fprintf(stderr, "[%d]: test_constant_input: ERROR in image data\n", rank); exit(status); } float retinaVal = sumOfWeights * image->getConstantVal(); status = checkInput(retina->getLayerLoc(), retina->getActivity(), retinaVal, false); if (status != 0) { fprintf(stderr, "[%d]: test_constant_input: ERROR in retina data\n", rank); exit(status); } status = checkInput(retina->getLayerLoc(), retina->getLayerData(), retinaVal, true); if (status != 0) { fprintf(stderr, "[%d]: test_constant_input: ERROR in retina data\n", rank); exit(status); } delete hc; delete initObj; return status; }