离散Hopfield网络在二维平面上坐标点的联想记忆问题

@元胞内容引用自非元胞数组对象。

第一次发布文章,不对的地方敬请指正

主要针对于《matlab神经网络原理与实例精解》中的反馈神经网络中hopfield_newhop.m中,书上给出的代码无法正确运行,自己经过调试解决以及无法解决的问题。

书上的源代码如下:

% hopfield_newhop.m
% 定义吸引子
T=[-1,1;1,-1];

% 创建Hopfield网络
net=newhop(T);

% 用原平衡位置的坐标作为输入进行仿真
Y=sim(net,2,[],T);
fprintf('输入平衡中心得出的结果:');
disp(Y);

% 用新的值作为输入
rng(0);
N=10;
for i=1:N
   y=rand(1,2)*2-1;
   y(y>0)=1;
   y(y<=0)=-1;
   [Y,a,b]=sim(net,{1,5},[],y');
   if(sum(abs(b))<1.0e-1)
      b=[0,0]';
   end
   fprintf('第%d组测试数据:',i);
   disp(y);
   fprintf('网络输出:       ');
   disp(b');
 
end

但是运行的时候出现:

在这里插入图片描述

经过对源代码的分析,然后发现,仿真的时候返回参数中的b是一个细胞数组,无法直接参与运算。所以将第21行代码中修改为

if(sum(abs(b{1}))<1.0e-1)

再来看看运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这时发现运行结果与书上的结果大致相同,但是对于网络输出,如果不是输出[0,0],就会出现[2x1 double]。这是因为b是个细胞数组,但是在解决这个问题上,尝试使用b{1}来代替b的方式,却又发生元胞内容引用自非元胞数组对象。
该问题暂时没找到解决方法,大家可以互相交流!

原创文章 5 获赞 3 访问量 708

猜你喜欢

转载自blog.csdn.net/i_want_study/article/details/98719906