| Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) | 
![]()  | 
	
| 
	 | 
| 		
			
			 | 
		#1 | 
| 
			
			 初级会员 
			
			
			
			注册日期: 2009-03-21 
				
				年龄: 39 
				
					帖子: 4
				 
				
				
				声望力: 0 ![]()  | 
	
	
	
		
		
			
			 
			
			在BP训练时,训练窗口在每次训练的时候总不断的弹出,当程序循环建模时搞的计算机无法使用,现在我找到了问题的根源。 
		
		
		
		
		
		
		
	在BP程序调用 train--> feval --> trainscg --> plotperf ,这样一个调用链,解决的地方也就在最后一个函数。我的存放地址是:toolbox\nnet\nnet\nnplot\plotperf.m 里面有一句代码,如下 % Special case 2: Delete plot if zero epochs if (epoch == 0) | isnan(tr.perf(1)) fig = find_existing_figure; if (fig) delete(fig); end if (nargout) stop = 0; end return end 经分析试验得知,其中 if (fig) delete(fig); 的意思是当一次模型完毕,或者当一次模型要开始建立,要先删除原建模时的训练图(当然后期好要再建立一个),这就形成了训练窗口不断更新不断出现的情况,所以,只要把delete(fig) 注释掉就ok了! 经验证,bp训练起来变乖, 不会搞得你总的最下化窗口了。  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 		
			
			 | 
		#2 | 
| 
			
			 初级会员 
			
			
			
			注册日期: 2008-11-26 
				
				年龄: 42 
				
					帖子: 6
				 
				
				
				声望力: 0 ![]()  | 
	
	
	
		
		
			
			 
			
			根据楼上的分析,我也查看了plotperf.m文件,也做了上述修改,有几点想说明一下: 
		
		
		
		
		
		
		
		
			1,注释掉 : 70 if (fig), delete(fig); end 后,只能当训练第一次开始,发现已经存在了子那个曲线子窗口,才做删除操作;事实上,在后面的代码中,程序要么建立新窗口(new_figure(name) name是采用的训练函数); 2,建新窗口是因为,当曲线到达goal的时候返回停止训练操作;因此在训练过程中不能按搂主所说不出现窗口;于是我想到在训练结束后,关闭窗口 通过查找有关figure的操作,我写了如下函数,可以满足楼主需要: function ClosedWindow( WindowName ) %CLOSEDWINDOW Summary of this function goes here % Detailed explanation goes here for child=get(0,'children')' % ...for objects whose type is figure... if strcmp(get(child,'Name'),WindowName)%'Training with TRAINLM') close(child); break end endWindowName 是窗口名;就是最后选练结束窗体窗口名; 此帖于 2010-01-08 14:39 被 neu_cnlj 编辑。 原因: 更正错误  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 		
			
			 | 
		#3 | |
| 
			
			 初级会员 
			
			
			
			注册日期: 2009-03-21 
				
				年龄: 39 
				
					帖子: 4
				 
				
				
				声望力: 0 ![]()  | 
	
	
	
		
		
			
			 引用: 
	
 谢谢你的建议,我会试下的,现在出差中。。。  | 
|
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 |