Beispiel #1
0
  /**
   * @param samples The number of input vectors the error is sampled over
   * @return Mean-squared error of this origin over randomly selected points
   */
  public float[] getError(int samples) {
    float[] result = new float[getDimensions()];

    if (myNode instanceof NEFEnsemble) {
      NEFEnsemble ensemble = (NEFEnsemble) myNode;

      VectorGenerator vg = new RandomHypersphereVG(false, 1, 0);
      float[][] unscaled = vg.genVectors(samples, ensemble.getDimension());
      float[][] input = new float[unscaled.length][];
      for (int i = 0; i < input.length; i++) {
        input[i] = MU.prodElementwise(unscaled[i], ensemble.getRadii());
      }

      float[][] idealOutput = NEFUtil.getOutput(this, input, SimulationMode.DIRECT);
      float[][] actualOutput = NEFUtil.getOutput(this, input, SimulationMode.CONSTANT_RATE);

      float[][] error = MU.transpose(MU.difference(actualOutput, idealOutput));
      for (int i = 0; i < error.length; i++) {
        result[i] = MU.prod(error[i], error[i]) / error[i].length;
      }
    } else {
      ourLogger.warn(
          "Can't calculate error of a DecodedOrigin unless it belongs to an NEFEnsemble");
    }

    return result;
  }