查看: 2072|回复: 2|关注: 0

[未答复] network的subsindex的定义问题

[复制链接]

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
发表于 2017-11-20 11:36:34 | 显示全部楼层 |阅读模式
1、我的问题:
在运行matlab的时候出现如下提示,摸不着头脑,请老师们指导下:

以下为第1次交叉验证结果
当前number值为1
错误使用 subsindex
没有为类 'network' 的值定义函数 'subsindex'。

出错 K_BP (line 74)
        net=train(net,input_cv_train,output_cv_train);



2、我使用的是32位 2014a,操作系统是32位win7系统。

3、代码程序如下:
  1. %% BP的数据预测—基于K折交叉验证的前馈型神经网络的预测
  2. % by BRAVE
  3. %% 清空环境变量
  4. clc;
  5. clear all
  6. close all
  7. nntwarn off;

  8. %% 载入数据
  9. %%load data input output;
  10. input=[49845        18789        5.06        0.17        14.8        0.18        998.1        526.82;
  11. 51252        12477        5.06        0.17        15.2        0.21        1000.5        567.33;
  12. 54541        12448        5.17        0.2        16.1        0.21        100.5        579.49;
  13. 57954        135185        5.46        0.23        16.5        0.21        1004.6        585.42;
  14. 67512        152367        5.46        0.27        18.7        0.26        1004.6        574.06;
  15. 74265        182564        6.01        0.25        21.6        0.28        1207.8        601.45;
  16. 82045        201547        6.12        0.26        25.8        0.29        1314.8        627.45;
  17. 89152        225790        6.21        0.26        30.5        0.31        1426.8        674.56;
  18. 96457        240579        6.37        0.28        34.9        0.33        1537.8        716.54;
  19. 105651        263854        6.38        0.28        39.8        0.36        1674.5        765.24;
  20. 112560        285469        6.65        0.3        42.5        0.39        1754.4        812.22;
  21. 116587        294324        6.65        0.3        46.7        0.41        1875.5        875.54;
  22. 119580        280754        6.8        0.31        48.9        0.45        1956.41        856.44;];
  23. output=[145697        59571        57132;
  24. 146256        62545        59212;
  25. 147563        67165        67454;
  26. 147569        69263        67362;
  27. 169587        79856        78165;
  28. 190895        91658        90548;
  29. 207458        99635        98752;
  30. 228479        106970        102564;
  31. 250697        120889        111257;
  32. 271254        130475        120365;
  33. 290684        145454        135410;
  34. 308654        158792        142452;
  35. 318454        160446        156854;];
  36. % 载入数据并将数据分成训练和预测两类
  37. input_train=input(1:10,:);
  38. output_train=output(1:10,:);
  39. input_test=input(11:13,:);
  40. output_test=output(11:13,:);

  41. %% K折(k=4)交叉验证
  42. desired_number=[];%隐层神经元个数
  43. mse_max=10e20;
  44. desired_input=[];%理想的输入样本
  45. desired_output=[];%理想的输出样本
  46. result_perfp=[];
  47. indices = crossvalind('Kfold',length(input_train),4);
  48. h=waitbar(0,'正在寻找最优化参数....');
  49. k=1;%??
  50. for i = 1:4
  51.     perfp=[];
  52.     disp(['以下为第',num2str(i),'次交叉验证结果'])
  53.     test = (indices == i);%测试集在数据集input_train中的索引值
  54.     train = ~test;%训练集在数据集input_train中的索引值
  55.     input_cv_train=input_train(train,:);
  56.     output_cv_train=output_train(train,:);
  57.     input_cv_test=input_train(test,:);
  58.     output_cv_test=output_train(test,:);
  59.     input_cv_train=input_cv_train';
  60.     output_cv_train=output_cv_train';
  61.     input_cv_test= input_cv_test';
  62.     output_cv_test= output_cv_test';
  63.     [input_cv_train,minp,maxp,output_cv_train,mint,maxt]=premnmx(input_cv_train,output_cv_train);
  64.     input_cv_test=tramnmx(input_cv_test,minp,maxp);
  65.     for number=1:10
  66.         net=newff(input_cv_train,output_cv_train,number,{'tansig','tansig'},'trainlm');
  67.         net.trainParam.epochs=10000;
  68.         net.trainParam.lr=0.001;
  69.         net.trainParam.goal=0.0001;
  70.         waitbar(k/80,h);
  71.         disp(['当前number值为', num2str(number)]);
  72.         net=train(net,input_cv_train,output_cv_train);
  73.         test_Out=sim(net,input_cv_test);
  74.         test_Out=postmnmx(test_Out,mint,maxt);
  75.         error=output_cv_test-test_Out;
  76.         disp(['当前网络的mse为',num2str(mse(error))])
  77.         perfp=[perfp mse(error)];
  78.         if mse(error)<mse_max
  79.             mse_max=mse(error);
  80.             desired_number=number;
  81.             desired_input=input_cv_train;
  82.             desired_output=output_cv_train;
  83.         end
  84.         k=k+1;
  85.     end
  86.     result_perfp(i,:)=perfp;
  87. end;
  88. close(h)
  89. disp(['最佳spread值为',num2str(desired_number)])
  90. disp(['此时最佳输入值为'])
  91. desired_input
  92. disp(['此时最佳输出值为'])
  93. desired_output
  94. %% 采用最佳方法建立BP网络
  95. net=newff(desired_input,desired_output,desired_number,{'tansig','tansig'},'trainlm');

  96. net.trainParam.epochs=10000;
  97. net.trainParam.lr=0.001;
  98. net.trainParam.goal=0.0001;
  99. %% BP网络训练
  100. net=train(net,desired_input,desired_output);
  101. %% BP网络测试
  102. input_test=input_test';
  103. input_test=tramnmx(input_test,minp,maxp);
  104. BP_test_result=sim(net,input_test);
  105. BP_test_result=postmnmx(BP_test_result,mint,maxt);
  106. BP_error=output_test-BP_test_result';
  107. disp(['BP神经网络三项流量预测的误差为',num2str(abs(BP_error))])
  108. save best desired_input desired_output input_test output_test BP_error mint maxt
  109. %% BP网络预测
  110. %预测数据归一化
  111. %input_predict=input_predict';
  112. %input_predict=tramnmx(input_predict,minp,maxp);

  113. %网络预测输出
  114. %BP_predict_resultpredict=sim(net,input_predict);

  115. %网络输出反归一化
  116. %BP_predict_resultpredict=postmnmx(BP_predict_resultpredict,mint,maxt);




复制代码


新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2017-11-20 13:14:58 | 显示全部楼层
希望各位老师能够多多指教。

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2017-11-20 13:54:22 | 显示全部楼层
已经解决。
首先,特别感谢blues和林夕舞的博客,没有他的博客,我不可能这么快解决。贴出他的博客,同学们如果遇到类似问题,可以参考博文《matlab神经网络不常见问题》或者《[转载]matlab神经网络不常见问题》
然后,归到本文,因为我之前定义了train的变量,之后又调用了train函数,前后出现了矛盾,出现了错误,只需将之前的train改个名字即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表