📄 javanns_kernelinterface.c
字号:
* 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 + -