研究神经网络都会发现其挺amazing的.如图像识别,只需要告诉计算机这张图是什么,然后就能识别,就像计算机有了自己的意识一样.
那么神经网络能否实现推理呢?比如,有5个数字,期望的结果是其中的最大值 减 最小值. 经过实践,发现训练样本直接测试,匹配度很高,但是也不够精确,而测试数据匹配度更不行,这是过拟合了吗?或者这样的情况根本满足不了曲线拟合?
上面这种情况,人通过分析应该是很容易发现规律,然后100%的正确.而计算机只是计算出大概的数字.因此计算机还不能推理.期待更nb的算法,让计算机实现推理~.~附加测试代码
clear;
%两个特征,第一个>第二个输出1,相等为0,否则=-1
% x=randi(10,100,2);
% T=zeros(100,1);
% T(find(x(:,1)-x(:,2)>0))=1;
% T(find(x(:,1)-x(:,2)<0))=-1;
%两个特征,有一个>70的就为1
% x=randi(100,100,2);
% T=zeros(100,1);
% T(find(x(:,1)>70|x(:,2)>70))=1;
%1个特征,10~99之间,输出为数字拆开
% x=randi([0,99],100,1);
% T=zeros(100,2);
% T(:,1)=(x-mod(x,10))/10;
% T(:,2)=mod(x,10);
%2个特征,1是有效2是干扰,输出=1
% x=randi([0,100],100,2);
% T=x(:,1);
%5个特征,结果是其中的最大-最小
% x=randi(100,1000,5);
% T=max(x,[],2)-min(x,[],2);
%TS=randi(100,1000,5);
%TSRS=max(TS,[],2)-min(TS,[],2);
%5个特征,结果是最大值的index
x=randi(500,20000,5);
TS=randi(500,1000,5);
[nnnn,T]=max(x,[],2);
[nnnn,TSRS]=max(TS,[],2);
pmax = max(x);
pmax1 = max(pmax);
pmin = min(x);
pmin1 = min(pmin);
TS=(TS-pmin1)/(pmax1-pmin1);
P1=(x-pmin1)/(pmax1-pmin1);
T1=(T-pmin1)/(pmax1-pmin1);
net = newff(P1',T1',[100],{'logsig'});
net.trainParam.epochs = 150000;
net.trainParam.goal=1e-60;
net.trainParam.lr = 0.01;
net = train(net,P1',T1');
y=sim(net,TS');
y1=y*(pmax1-pmin1)+pmin1;
myrs=[y1',TSRS];