一、离散型Hopfield处理数字图片,并比较外积法直接求得的网络和通过自带工具箱newhop函数创建的网络有何不同
程序如下:
clear
clc
load data1 array_one
load data2 array_two
%这里加载的两个数组都是10X10的数组,里面的值为-1和+1两种情况。据目前对离散型Hopfield的使用,数据都是-1或者+1,因为这个要求和设定激励函数为取符号函数还有能量函数有很大关系。
%这两个数组将会在后面的结果里面显示出来,+1的地方会表示为白色,-1的地方表示为黑色。
T=[array_one;array_two]';%这个地方将两个图片堆叠起来,并进行了转置。至于数据为什么要进行转置上不太清楚。现在T是一个10X20的数组
net=newhop(T);%通过自带的newhop函数创建一个Hopfield网络。
%接下来应该检查T中两组数据是否是在稳定点上,也就是将T中的数据输入到net中,观察输出的数据,是否和T一样,如果一样,就说明两组数据是在稳定点。
[Y,Pf,Af]=sim(net,{10,5},{},T(:,1:10));
%然后观察Y中一共有5个元包,每个元包是一个10X10的数组,就是把T中的第一个数据T(:,1:10)输入net中,经过5步的变化,每一步的结果都放在了对应的元包当中,观察每个元宝中的数组,和T对照会发现完全相同,因为数字1的对称性非常好。
%下面是原始数据和输出结果Y中每个元包中数据的比照
imshow(imresize(T(:,1:10)',20));
imshow(imresize(Y{1}',20));
imshow(imresize(Y{2}',20));
imshow(imresize(Y{3}',20));
imshow(imresize(Y{4}',20));
imshow(imresize(Y{5}',20));
会发现这些图片都一样,说明第一个数据也就是表示1的图片数据是稳定的。
下面看第二组数据的稳定性,观察输出结果和输入结果是否相同:
[Y,Pf,Af]=sim(net,{10,5},{},T(:,11:20));
为了方便,不在显示T中表示2数字的图片,也不再显示5个步骤中没步骤的结果只显示最后一步的结果
imshow(imresize(Y{5}',20));