2015-05-03 3 views
1

Я использую библиотеку FANN с данным кодом.FANN Neural Network - постоянный результат

#include <stdio.h> 
#include "doublefann.h" 
int main() 
{ 
    const NUM_ITERATIONS = 10000; 
    struct fann *ann; 
    int topology[] = { 1, 4, 1 }; 
    fann_type d1[1] = { 0.5 }; 
    fann_type d2[1] = { 0.0 }; 
    fann_type *pres; 
    int i; 

    /* Create network */ 
    ann = fann_create_standard_array(3, topology); 

    /* 
    * Train network 
    * input: 0.0 => output: 0.5 
    * input: 0.5 => output: 0.0 
    */ 
    i = NUM_ITERATIONS; 
    while (--i) 
    { 
     fann_train(ann, d1, d2); 
     fann_train(ann, d2, d1); 
    } 

    /* Should return 0.5 */ 
    pres = fann_run(ann, d2); 
    printf("%f\n", pres[0]); 

    /* Should return 0.0 */ 
    pres = fann_run(ann, d1); 
    printf("%f\n", pres[0]); 

    /* Destroy network */ 
    fann_destroy(ann); 

    return 0; 
} 

Я ожидал, что результат первого запуска равным 0,5, так как в соответствии с подготовки выходное значение к входному значению 0.0 должна составлять 0,5. Соответственно, я ожидал, что выход второго прогона будет 0.0.

Но результат будет постоянным 0.0 для каждого из этих двух прогонов.

Что мне здесь не хватает?

+0

Эта библиотека, возможно, поможет вам: https://sourceforge.net/projects/c-cnne-networks/ – SomethingSomething

ответ

0

От this site: Попытайтесь заменить doublefann.h на fann.h.

+0

Спасибо большое, что решило проблему! Теперь результат равен 0.0 и 0.5. Но когда я разделяю тренировочный цикл на два отдельных цикла, результат будет 0,25 и 0,5. Это нормально? – ltb68167

+0

После тренировки весы оптимизированы для определенного набора данных, в вашем случае, для 'd2 = 0.0'. Затем вы берете эту * обученную сеть и оптимизируете ее весы для 'd1 = 0,5', но в этом процессе вы« переписываете »предыдущую тренировку. Вы должны тренироваться только один раз, эти сети ** не могут впоследствии включить новую информацию. – Luis