我正在尝试 FANN 进行简单的 NN 训练以映射两个正弦波。
#include <stdio.h>
#include <fann.h>
#define PI 3.141593
int main()
{
const unsigned int num_input = 1;
const unsigned int num_output = 1;
const unsigned int num_layers = 3;
const unsigned int num_neurons_hidden = 3;
const float desired_error = 0.0f;
const unsigned int max_epochs = 100000;
const unsigned int epochs_between_reports = 1000;
const unsigned int samples = 1000;
struct fann *ann = fann_create_standard(num_layers, num_input, num_neurons_hidden, num_output);
fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);
struct fann_train_data *data = fann_create_train(samples, num_input, num_output);
// Creating sample data by two sin waves
for (unsigned int i = 0; i < samples; i++) {
float x = (float) i / 100.0f;
float input = sin(x * 0.01f * PI);
float output = sin(x * 0.083f * PI);
data->input[i][0] = input;
data->output[i][0] = output;
}
fann_shuffle_train_data(data);
fann_train_on_data(ann, data, max_epochs, epochs_between_reports, desired_error);
fann_destroy_train(data);
fann_destroy(ann);
return 0;
}
它确实对部分波的曲率起作用,但是如果将样本数量从
1000
增加到说10000
,当正弦波出现时,模型不会学习。
我们如何设计周期性输入/输出的神经网络架构?