在学习了大量的在线课程并阅读了许多论文后,我开始使用神经网络,但令我惊讶的是它未能概括简单的按位AND操作。神经网络未能概括简单的按位AND
输入:
Inp#1 - randomly generated number between 0-15, scaled down to (0,1)
Inp#2 - 16 bit randomly generated unsigned int scaled down to (0,1)
# Code snippet
int in1 = (int)rand()%16;
int in2 = (int)rand()%(0x0010000);
in[0] = (fann_type)(in1/100.0); // not to worry about float roundup
in[1] = (fann_type)(in2/100000.0); // not to worry about float roundup
输出:
Out#1 = -1 if the corresponding bit specified by index inp#1 in inp#2 value is 0, otherwise 1
# Code snippet
int out1 = (in2 & (1<<in1)) ? 1 : -1;
out[0] = (fann_type)out1;
网络:尝试了许多不同的变化,下面是示例
A. 1 hidden layer with 30 neurons,
Activation Function (hidden): sigmoid,
Activation Function (output): sigmoid_symmetric (tanh),
Training method: RPROP
Learning rate: 0.7 (default)
Momentum: 0.0 (default)
RPROP Increase factor: 1.2 (default)
RPROP Decrease factor: 0.5 (default)
RPROP Minimum Step-size: 0 (default)
RPROP Maximum Step-size: 50 (default)
B. 3 hidden layers each having 30 neurons, with the same params as in A
C. tried the same networks also with scaling inputs to (-1,1) and using tanh for also hidden layer.
数据集:5000个样本进行训练,5000用于测试和5000验证。尝试更大的数据集,没有成功
# examples from training set
0.040000 0.321600
-1
0.140000 0.625890
1
0.140000 0.039210
-1
0.010000 0.432830
1
0.100000 0.102220
1
过程:在网络训练用的训练集和并行监测测试数据的MSE,以避免可能的过度拟合。
图书馆:使用多个,但主要与fann一起使用,并使用fanntool为gui。
任何想法?如果有任何特殊兴趣,可以上传数据集。
你的学习率是多少?培训过程中成本函数的价值是什么? – gcucurull
更新了描述以涵盖缺少的信息并提供了实际的代码片段。谢谢 – user1039384
你在做什么是一个分类任务。为什么你使用-1,1输出和MSE代替0,1和log-loss?事实证明,这样的设置工作做得更好。顺便说一句。这个任务并不容易。对于神经网络来说,学习这样的操作看起来相当苛刻。 –