double RNN< LayerTypes, OutputLayerType, InitializationRuleType, PerformanceFunction >::Evaluate(const arma::mat& /* unused */, const size_t i, const bool deterministic) { this->deterministic = deterministic; arma::mat input = arma::mat(predictors.colptr(i), predictors.n_rows, 1, false, true); arma::mat target = arma::mat(responses.colptr(i), responses.n_rows, 1, false, true); // Initialize the activation storage only once. if (activations.empty()) InitLayer(input, target, network); double networkError = 0; seqLen = input.n_rows / inputSize; ResetParameter(network); error = arma::mat(outputSize, outputSize < target.n_elem ? seqLen : 1); // Iterate through the input sequence and perform the feed forward pass. for (seqNum = 0; seqNum < seqLen; seqNum++) { // Perform the forward pass and save the activations. Forward(input.rows(seqNum * inputSize, (seqNum + 1) * inputSize - 1), network); SaveActivations(network); // Retrieve output error of the subsequence. if (seqOutput) { arma::mat seqError = error.unsafe_col(seqNum); arma::mat seqTarget = target.submat(seqNum * outputSize, 0, (seqNum + 1) * outputSize - 1, 0); networkError += OutputError(seqTarget, seqError, network); } } // Retrieve output error of the complete sequence. if (!seqOutput) return OutputError(target, error, network); return networkError; }
/***************************************************************************** * gribDraw() -- * * Arthur Taylor / MDL * * PURPOSE * This use GD to create an image based on the grid and a control file. * * ARGUMENTS * Filename = Name of file to save to. (Input) * grib_Data = The grib2 data to write. (Input) * mapIniFile = Name of the mapIni file to control the draws. (Input) * meta = Meta Data about the grid. (Input) * usr = User specified options. (Input) * * RETURNS: int (could use errSprintf()) * 0 = OK * * HISTORY * 10/2005 Arthur Taylor (MDL): Created. * * NOTES ***************************************************************************** */ int drawGrib (const char *Filename, double *grib_Data, const char *mapIniFile, const char *mapIniOptions, gdsType *gds, double Min, double Max, sChar f_missing, double missing, grib_MetaData *meta, userType *usr) { mapIniType mapIni; myMaparam map; /* Used to compute the grid lat/lon points. */ #ifdef TESTING double lat, lon; #endif size_t nameLen = strlen (Filename); double orientLon; FILE *fp; int i; #ifdef DEBUG printf ("start drawGrib. %f\n", clock () / (double) (CLOCKS_PER_SEC)); #endif if (nameLen < 4) { errSprintf ("ERROR: File %s is too short in length (it may need an " "extension?)", Filename); return -2; } /* Set up map projection. */ if (GDSValid (gds) != 0) { preErrSprintf ("ERROR: Grid Definition Section was not Valid.\n"); return -1; } SetMapParamGDS (&map, gds); InitMapIni (&mapIni); if (mapIniFile != NULL) { if ((fp = fopen (mapIniFile, "rt")) == NULL) { errSprintf ("Couldn't open %s for read\n", mapIniFile); FreeMapIni (&mapIni); return -1; } if (ParseMapIniFile (&mapIni, mapIniOptions, fp) != 0) { FreeMapIni (&mapIni); return 0; } fclose (fp); } else { /* Set default background color. */ mapIni.all.bg.f_null = 1; mapIni.all.bg.r = 255; mapIni.all.bg.g = 255; mapIni.all.bg.b = 255; } /* Set defaults for zoom. */ if (mapIni.zoom.f_flag == 0) { if (map.f_latlon == 1) { mapIni.zoom.lat1 = map.lat1; mapIni.zoom.lon1 = map.lon1; mapIni.zoom.lat2 = map.latN; mapIni.zoom.lon2 = map.lonN; } else { myCxy2ll (&map, .5, .5, &(mapIni.zoom.lat1), &(mapIni.zoom.lon1)); myCxy2ll (&map, gds->Nx + .5, gds->Ny + .5, &(mapIni.zoom.lat2), &(mapIni.zoom.lon2)); #ifdef TESTING myCxy2ll (&map, .5, .5, &lat, &lon); printf ("%f %f\n", lat, lon); mapIni.zoom.lat1 = mapIni.zoom.lat2 = lat; mapIni.zoom.lon1 = mapIni.zoom.lon2 = lon; myCxy2ll (&map, .5, gds->Ny + .5, &lat, &lon); printf ("%f %f\n", lat, lon); if (lat < mapIni.zoom.lat1) mapIni.zoom.lat1 = lat; if (lat > mapIni.zoom.lat2) mapIni.zoom.lat2 = lat; if (lon < mapIni.zoom.lon1) mapIni.zoom.lon1 = lon; if (lon > mapIni.zoom.lon2) mapIni.zoom.lon2 = lon; myCxy2ll (&map, gds->Nx + .5, gds->Ny + .5, &lat, &lon); printf ("%f %f\n", lat, lon); if (lat < mapIni.zoom.lat1) mapIni.zoom.lat1 = lat; if (lat > mapIni.zoom.lat2) mapIni.zoom.lat2 = lat; if (lon < mapIni.zoom.lon1) mapIni.zoom.lon1 = lon; if (lon > mapIni.zoom.lon2) mapIni.zoom.lon2 = lon; myCxy2ll (&map, gds->Nx + .5, .5, &lat, &lon); printf ("%f %f\n", lat, lon); if (lat < mapIni.zoom.lat1) mapIni.zoom.lat1 = lat; if (lat > mapIni.zoom.lat2) mapIni.zoom.lat2 = lat; if (lon < mapIni.zoom.lon1) mapIni.zoom.lon1 = lon; if (lon > mapIni.zoom.lon2) mapIni.zoom.lon2 = lon; printf ("%f %f\n", lat, lon); printf ("%f %f %f %f\n", mapIni.zoom.lat1, mapIni.zoom.lon1, mapIni.zoom.lat2, mapIni.zoom.lon2); #endif } mapIni.zoom.f_flag = 15; } /* Set defaults for projection section. */ if ((mapIni.proj.f_flag1 != 31) || (mapIni.proj.f_flag2 != 31)) { mapIni.proj.type = gds->projType; mapIni.proj.minEarth = gds->minEarth; mapIni.proj.majEarth = gds->majEarth; mapIni.proj.lat1 = gds->lat1; mapIni.proj.lon1 = gds->lon1; mapIni.proj.f_flag1 = 31; mapIni.proj.mesh = gds->Dx; orientLon = gds->orientLon; if (orientLon > 180) { orientLon -= 360; } if (orientLon < -180) { orientLon += 360; } mapIni.proj.orientLon = orientLon; mapIni.proj.meshLat = gds->meshLat; mapIni.proj.scaleLat1 = gds->scaleLat1; mapIni.proj.scaleLat2 = gds->scaleLat2; mapIni.proj.f_flag2 = 31; } if (mapIni.all.numLayer == 0) { mapIni.all.numLayer = 1; mapIni.all.layers = (layerType *) malloc (mapIni.all.numLayer * sizeof (layerType)); InitLayer (&(mapIni.all.layers[0])); mapIni.all.layers[0].type = GRID; mapIni.all.layers[0].shpType = MEMORY; mapIni.all.layers[0].ramp.numColors = 0; mapIni.all.layers[0].ramp.colors = NULL; mapIni.all.layers[0].ramp.numLab = 0; mapIni.all.layers[0].ramp.labRay = NULL; mapIni.all.layers[0].ramp.labJust = NULL; mapIni.all.layers[0].ramp.label = NULL; mapIni.all.layers[0].ramp.f_missing = 0; mapIni.all.layers[0].ramp.thick = 0; } for (i = 0; i < mapIni.all.numLayer; i++) { if (mapIni.all.layers[i].shpType == MEMORY) { mapIni.all.layers[i].gridData = grib_Data; mapIni.all.layers[i].gridNx = gds->Nx; mapIni.all.layers[i].gridNy = gds->Ny; mapIni.all.layers[i].gridProj.type = gds->projType; mapIni.all.layers[i].gridProj.minEarth = gds->minEarth; mapIni.all.layers[i].gridProj.majEarth = gds->majEarth; mapIni.all.layers[i].gridProj.lat1 = gds->lat1; mapIni.all.layers[i].gridProj.lon1 = gds->lon1; mapIni.all.layers[i].gridProj.f_flag1 = 31; mapIni.all.layers[i].gridProj.mesh = gds->Dx; orientLon = gds->orientLon; if (orientLon > 180) { orientLon -= 360; } if (orientLon < -180) { orientLon += 360; } mapIni.all.layers[i].gridProj.orientLon = orientLon; mapIni.all.layers[i].gridProj.meshLat = gds->meshLat; mapIni.all.layers[i].gridProj.scaleLat1 = gds->scaleLat1; mapIni.all.layers[i].gridProj.scaleLat2 = gds->scaleLat2; mapIni.all.layers[i].gridProj.f_flag2 = 31; if (mapIni.all.layers[i].ramp.numColors == 0) { SetGridRamp (&(mapIni.all.layers[i]), Min, Max, f_missing, missing); } else { if (f_missing) { mapIni.all.layers[i].ramp.missValue = missing; mapIni.all.layers[i].ramp.f_missing = f_missing; } } } } /* Set defaults for output. */ if (mapIni.out.f_flag != 3) { mapIni.out.X_Size = 520; mapIni.out.Y_Size = 420; mapIni.out.f_flag = 3; } if (mapIni.out.numOutputs == 0) { mapIni.out.numOutputs = 1; mapIni.out.outputs = (outputType *) malloc (mapIni.out.numOutputs * sizeof (outputType)); mapIni.out.outputs[0].numActive = 1; mapIni.out.outputs[0].active = (int *) malloc (mapIni.out.outputs[0].numActive * sizeof (int)); mapIni.out.outputs[0].active[0] = 1; mapIni.out.outputs[0].filename = NULL; } for (i = 0; i < mapIni.out.numOutputs; i++) { if (mapIni.out.outputs[i].filename == NULL) { mapIni.out.outputs[i].filename = (char *) malloc (nameLen + 1 * sizeof (char)); strncpy (mapIni.out.outputs[i].filename, Filename, nameLen - 3); strncpy (mapIni.out.outputs[i].filename + nameLen - 3, "png", 3); mapIni.out.outputs[i].filename[nameLen] = '\0'; } } if (ValidateMapIni (&mapIni) != 0) { printf ("MapINI was invalid \n"); FreeMapIni (&mapIni); return 0; } #ifdef DEBUG printf ("Before ControlDraw. %f\n", clock () / (double) (CLOCKS_PER_SEC)); #endif ControlDraw (&mapIni); #ifdef DEBUG printf ("after ControlDraw. %f\n", clock () / (double) (CLOCKS_PER_SEC)); #endif FreeMapIni (&mapIni); return 0; }