int TestConnProbe::outputState(double timed){ //Grab weights of probe and test for the value of .625/1.5, or .4166666 HyPerConn* conn = getTargetHyPerConn(); int numPreExt = conn->preSynapticLayer()->getNumExtended(); int syw = conn->yPatchStride(); // stride in patch for(int kPre = 0; kPre < numPreExt; kPre++){ PVPatch * weights = conn->getWeights(kPre, 0); int nk = conn->fPatchSize() * weights->nx; pvwdata_t * data = conn->get_wData(0,kPre); int ny = weights->ny; for (int y = 0; y < ny; y++) { pvwdata_t * dataYStart = data + y * syw; for(int k = 0; k < nk; k++){ if(fabs(timed - 0) < (parent->getDeltaTime()/2)){ if(fabs(dataYStart[k] - 1) > .01){ std::cout << "dataYStart[k]: " << dataYStart[k] << "\n"; } assert(fabs(dataYStart[k] - 1) <= .01); } else if(fabs(timed - 1) < (parent->getDeltaTime()/2)){ if(fabs(dataYStart[k] - 1.375) > .01){ std::cout << "dataYStart[k]: " << dataYStart[k] << "\n"; } assert(fabs(dataYStart[k] - 1.375) <= .01); } } } } return PV_SUCCESS; }
int MomentumTestConnProbe::outputState(double timed){ //Grab weights of probe and test for the value of .625/1.5, or .4166666 HyPerConn* conn = getTargetHyPerConn(); int numPreExt = conn->preSynapticLayer()->getNumExtended(); int syw = conn->yPatchStride(); // stride in patch for(int kPre = 0; kPre < numPreExt; kPre++){ PVPatch * weights = conn->getWeights(kPre, 0); int nk = conn->fPatchSize() * weights->nx; pvwdata_t * data = conn->get_wData(0,kPre); int ny = weights->ny; pvdata_t wCorrect; for (int y = 0; y < ny; y++) { pvwdata_t * dataYStart = data + y * syw; for(int k = 0; k < nk; k++){ pvdata_t wObserved = dataYStart[k]; if(timed < 3){ wCorrect = 0; } else{ wCorrect = .376471; for(int i = 0; i < (timed-3); i++){ wCorrect += .376471 * exp(-(2*(i+1))); } } assert(fabs(wObserved - wCorrect) <= 1e-4); } } } return PV_SUCCESS; }
/** * @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; }