⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javanns_kernelinterface.c

📁 著名的神经网络工具箱
💻 C
📖 第 1 页 / 共 5 页
字号:
 * Class:     javanns_KernelInterface
 * Method:    getLearnFunc
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL
Java_javanns_KernelInterface_getLearnFunc(JNIEnv *jEnv, jobject jObj) {
  char *p = krui_getLearnFunc();
  if(p) return (*jEnv)->NewStringUTF(jEnv, p );
  else return (*jEnv)->NewStringUTF(jEnv, "" );
}

/*
 * Class:     javanns_KernelInterface
 * Method:    getFFLearnFunc
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL
Java_javanns_KernelInterface_getFFLearnFunc(JNIEnv *jEnv, jobject jObj) {
  char *p = krui_getFFLearnFunc();
  if(p) return (*jEnv)->NewStringUTF(jEnv, p );
  else return (*jEnv)->NewStringUTF(jEnv, "" );
}

/*
 * Class:     javanns_KernelInterface
 * Method:    getPrunFunc
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL
Java_javanns_KernelInterface_getPrunFunc(JNIEnv *jEnv, jobject jObj) {
  char *p = krui_getPrunFunc();
  if(p) return (*jEnv)->NewStringUTF(jEnv, p );
  else return (*jEnv)->NewStringUTF(jEnv, "" );
}

/*
 * Class:     javanns_KernelInterface
 * Method:    trainNet
 * Signature: (I)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_trainNet__I(JNIEnv *jEnv, jobject jObj, jint trainsteps) {
  jclass cls = (*jEnv)->GetObjectClass(jEnv, jObj);
  jfieldID fid;
  int i;

  /* initialize learn parameter array if not already done: */
  if (! init_learn_flag) {
    learn[0] = 0.2f;
    for(i=1; i<NO_OF_LEARN_PARAMS; i++) learn[i] = 0.0;
    init_learn_flag = TRUE;
  }

  /* Train net once or several times */
  for(i=0;
      i<trainsteps &&
        isOK(jEnv, krui_learnAllPatterns(learn, NO_OF_LEARN_PARAMS, &result, &resultnum) );
      i++);
  cyclenum += i;

  // pass results to Java:
  fid = (*jEnv)->GetFieldID(jEnv, cls, "cycles", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, cyclenum);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "sse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, resultnum ? result[0] : -1);

  i = krui_getTotalNoOfSubPatterns();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "subpatterns", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "mse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, resultnum && i ? result[0]/i : -1);

  i = krui_getNoOfOutputUnits();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "output_units", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "ssepu", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, resultnum && i ? result[0]/i : -1);
}

/*
 * Class:     javanns_KernelInterface
 * Method:    trainFFNet
 * Signature: (I)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_trainFFNet__I(JNIEnv *jEnv, jobject jObj, jint trainsteps) {
  jclass cls = (*jEnv)->GetObjectClass(jEnv, jObj);
  jfieldID fid;

  trainFFNet(jEnv, jObj, trainsteps);

  // pass results to Java:
  fid = (*jEnv)->GetFieldID(jEnv, cls, "cycles", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, cyclenum);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "sse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]);

  i = krui_getTotalNoOfSubPatterns();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "subpatterns", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "mse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);

  i = krui_getNoOfOutputUnits();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "output_units", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "ssepu", "D");
  if(fid) {
    /* set built-in variable SSEPU only if output units are present: */
    if(i != 0) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);
    else (*jEnv)->SetDoubleField(jEnv, jObj, fid, -1);
  }
}

/*
 * Class:     javanns_KernelInterface
 * Method:    trainNet
 * Signature: (II)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_trainNet__II(JNIEnv *jEnv, jobject jObj, jint pat, jint trainsteps) {
  jclass cls = (*jEnv)->GetObjectClass(jEnv, jObj);
  jfieldID fid;
  int i;

  /* initialize learn parameter array if not already done: */
  if (! init_learn_flag) {
    learn[0] = 0.2f;
    for(i=1; i<NO_OF_LEARN_PARAMS; i++) learn[i] = 0.0;
    init_learn_flag = TRUE;
  }

  /* Train net once or several times */
  for(i=0;
      i<trainsteps &&
        isOK(jEnv, krui_learnSinglePattern(pat, learn, NO_OF_LEARN_PARAMS, &result, &resultnum) );
      i++);
  cyclenum += i;

  // pass results to Java:
  fid = (*jEnv)->GetFieldID(jEnv, cls, "cycles", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, cyclenum);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "sse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]);

  i = krui_getTotalNoOfSubPatterns();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "subpatterns", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "mse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);

  i = krui_getNoOfOutputUnits();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "output_units", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "ssepu", "D");
  if(fid) {
    /* set built-in variable SSEPU only if output units are present: */
    if(i != 0) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);
    else (*jEnv)->SetDoubleField(jEnv, jObj, fid, -1);
  }
}

/*
 * Class:     javanns_KernelInterface
 * Method:    trainFFNet
 * Signature: (II)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_trainFFNet__II(JNIEnv *jEnv, jobject jObj,
                                    jint pat,
                                    jint trainsteps) {
  jclass cls = (*jEnv)->GetObjectClass(jEnv, jObj);
  jfieldID fid;
  float *return_values;
  int NoOfOutParams;
  int cycle = 0;

  while(
    (cycle < trainsteps) &&
    ((cycle && (return_values [0] > min_error_to_stop)) || !cycle) &&
    isOK(jEnv, krui_learnSinglePatternFF(pat, learn, learnnum, &return_values, &NoOfOutParams) )
  ) cycle++;

  // pass results to Java:
  fid = (*jEnv)->GetFieldID(jEnv, cls, "cycles", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, cyclenum);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "sse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]);

  i = krui_getTotalNoOfSubPatterns();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "subpatterns", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "mse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);

  i = krui_getNoOfOutputUnits();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "output_units", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "ssepu", "D");
  if(fid) {
    /* set built-in variable SSEPU only if output units are present: */
    if(i != 0) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);
    else (*jEnv)->SetDoubleField(jEnv, jObj, fid, -1);
  }
}


/*
 * Class:     KernelInterface
 * Method:    trainNetFixedTime
 * Signature: (II)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_trainNetFixedTime__II(JNIEnv *jEnv, jobject jObj, jint trainsteps, jint d) {
  jclass cls = (*jEnv)->GetObjectClass(jEnv, jObj);
  jfieldID fid;
  int i;
  jdouble *body;
  jdoubleArray arr;
  jsize array_len;


  /* get java member variable */
  fid = (*jEnv)->GetFieldID(jEnv, cls, "sseArr", "[D");
  arr = (*jEnv)->GetObjectField(jEnv, jObj, fid);
  body = (*jEnv)->GetDoubleArrayElements(jEnv, arr, 0);
  array_len = (*jEnv)->GetArrayLength(jEnv, arr);

  /*initialize learn parameter array if not already done:*/
  if (! init_learn_flag) {
    learn[0] = 0.2f;
    for(i=1; i<NO_OF_LEARN_PARAMS; i++) learn[i] = 0.0;
    init_learn_flag = TRUE;
  }

  /*Train net once or several times*/
  start = time(NULL);
  body[0] = -1;
  for(i=0; i < array_len  &&
      ( i<trainsteps &&
        isOK(jEnv, krui_learnAllPatterns(learn, NO_OF_LEARN_PARAMS, &result, &resultnum) ) );
      i++) {
             body[i] = result[0];
	     if( time(NULL) > start +  d ) { ++i; break; } /* break if timeout */
	   }
  cyclenum += i;

  /* pass results to Java: */
  (*jEnv)->ReleaseDoubleArrayElements(jEnv, arr, body, 0);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "cycles", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, cyclenum);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "steps_done", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);

  i = krui_getTotalNoOfSubPatterns();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "subpatterns", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "mse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, resultnum && i ? result[0]/i : -1);

  i = krui_getNoOfOutputUnits();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "output_units", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "ssepu", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, resultnum && i ? result[0]/i : -1);
}

/*
 * Class:     KernelInterface
 * Method:    trainNetFixedTime
 * Signature: (III)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_trainNetFixedTime__III(JNIEnv *jEnv, jobject jObj, jint pat, jint trainsteps,jint d) {
  jclass cls = (*jEnv)->GetObjectClass(jEnv, jObj);
  jfieldID fid;
  int i;
  jdouble *body;
  jdoubleArray arr;
  jsize array_len;

  /* get java member variable */
  fid = (*jEnv)->GetFieldID(jEnv, cls, "sseArr", "[D");
  arr = (*jEnv)->GetObjectField(jEnv, jObj, fid);
  body = (*jEnv)->GetDoubleArrayElements(jEnv, arr, 0);
  array_len = (*jEnv)->GetArrayLength(jEnv, arr);

  /* initialize learn parameter array if not already done :*/
  if (! init_learn_flag) {
    learn[0] = 0.2f;
    for(i=1; i<NO_OF_LEARN_PARAMS; i++) learn[i] = 0.0;
    init_learn_flag = TRUE;
  }

  /* Train net once or several times */
  start = time(NULL);
  body[0] = -1;
  for(i=0; i < array_len &&
     ( i<trainsteps &&
        isOK(jEnv, krui_learnSinglePattern(pat, learn, NO_OF_LEARN_PARAMS, &result, &resultnum) ) );
      i++) {
             body[i] = result[0];
             if( time(NULL) > start +  d ) { ++i; break; } /* break if timeout */
	   }
  cyclenum += i;

  /* pass results to Java: */
  (*jEnv)->ReleaseDoubleArrayElements(jEnv, arr, body, 0);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "cycles", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, cyclenum);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "steps_done", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);

  i = krui_getTotalNoOfSubPatterns();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "subpatterns", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "mse", "D");
  if(fid) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);

  i = krui_getNoOfOutputUnits();
  fid = (*jEnv)->GetFieldID(jEnv, cls, "output_units", "I");
  if(fid) (*jEnv)->SetIntField(jEnv, jObj, fid, i);
  fid = (*jEnv)->GetFieldID(jEnv, cls, "ssepu", "D");
  if(fid) {
    /* set built-in variable SSEPU only if output units are present: */
    if(i != 0) (*jEnv)->SetDoubleField(jEnv, jObj, fid, result[0]/i);
    else (*jEnv)->SetDoubleField(jEnv, jObj, fid, -1);
  }
}


/*
 * Class:     javanns_KernelInterface
 * Method:    setPatternNo
 * Signature: (I)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setPatternNo(JNIEnv *jEnv, jobject jObj, jint patNo) {
  isOK(jEnv, krui_setPatternNo(patNo) );
}

/*
 * Class:     javanns_KernelInterface
 * Method:    getPatternNo
 * Signature: ()I
 */
JNIEXPORT jint JNICALL
Java_javanns_KernelInterface_getPatternNo(JNIEnv *jEnv, jobject jObj) {
  int i = krui_getPatternNo();
  isOK(jEnv, i);
  return i;
}

/*
 * Class:     javanns_KernelInterface
 * Method:    deletePattern
 * Signature: ()V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_deletePattern(JNIEnv *jEnv, jobject jObj) {
  isOK(jEnv, krui_deletePattern() );
}

/*
 * Class:     javanns_KernelInterface
 * Method:    modifyPattern
 * Signature: ()V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_modifyPattern(JNIEnv *jEnv, jobject jObj) {
  isOK(jEnv, krui_modifyPattern() );
}

/*
 * Class:     javanns_KernelInterface
 * Method:    setRemapFunc
 * Signature: (Ljava/lang/String;[D)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_setRemapFunc(JNIEnv *jEnv, jobject jObj,
                                  jstring jName,
                                  jdoubleArray jParams) {
  jsize i;
  int ok;
  const char *name = (*jEnv)->GetStringUTFChars(jEnv, jName, 0);
  jsize len = (*jEnv)->GetArrayLength(jEnv, jParams);
  jdouble *params = (*jEnv)->GetDoubleArrayElements(jEnv, jParams, 0);
  float *fparams = (float *) malloc (len * sizeof(float));
  if(!fparams) {
    (*jEnv)->ReleaseDoubleArrayElements(jEnv, jParams, params, 0);
    (*jEnv)->ReleaseStringUTFChars(jEnv, jName, name);
    error(jEnv, "Out of memory: malloc failed in setRemapFunc");
    return;
  }
  for(i=0; i<len; i++) fparams[i] = params[i];

  ok = krui_setRemapFunc( (char *)name, fparams);

  free(fparams);
  (*jEnv)->ReleaseDoubleArrayElements(jEnv, jParams, params, 0);
  (*jEnv)->ReleaseStringUTFChars(jEnv, jName, name);

  isOK(jEnv, ok);
}

/*
 * Class:     javanns_KernelInterface
 * Method:    showPattern
 * Signature: (I)V
 */
JNIEXPORT void JNICALL
Java_javanns_KernelInterface_showPattern(JNIEnv *jEnv,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -