【问题标题】:Architecture of specific ANN in MATLABMATLAB中特定ANN的架构
【发布时间】:2014-10-01 19:13:51
【问题描述】:

有人可以检查我是否猜到了输入/隐藏/输出层中神经元的正确数量以及整体参数。

我对这个 ANN 的想法:

输入神经元:784 (28x28)
隐藏层:1
隐藏层大小:25
激活函数:Log-sigmoid
训练方法:梯度下降
数据大小:400 + 200

有 400 个 bmp 图像用于训练,200 个用于检查(但只有 1-50 个以 100% 的概率被猜到,而其他的为 0%...)

clear all;
clc
for kk=1:400
    pl=ones(28,28);                     %³õʼ»¯28*28¶þֵͼÏñΪȫ°×
    m=strcat('b',int2str(kk),'.bmp');   %Á¬½Ó×Ö·ûµÃµ½Ñù±¾ÎļþÃû
    x=imread(m,'bmp');                  %¶ÁÈëÑб¾ÎļþͼÏñ
    pl=im2bw(x,0.5);                    %°ÑÑù±¾Í¼Ïñת»¯Îª¶þֵͼ
    for m=0:27                          %ÐγÉÉñ¾­ÍøÂçÊäÈëÏòÁ¿
        p(m*28+1:(m+1)*28,kk)=pl(1:28,m+1);
    end
end
%ÊÖдÌåÑù±¾¶ÔÓ¦µÄÊý×Ö£¨´Ób1.bmpµ½b400.bmp ¹²400¸ö£©£º
t=[5 0 4 1 9 2 1 3 1 4 3 6 3 6 1 7 2 8 6 9 4 0 9 1 1 2 4 3 2 7 8 8 6 9 0 5 6 0 7......
   6 1 8 7 9 3 9 8 5 9 3 3 0 7 4 9 8 0 9 4 1 4 4 6 0 4 5 6 1 0 0 1 7 1 6 3 0 2 1......
   1 7 8 0 2 6 7 8 3 9 0 4 6 7 4 6 8 0 7 8 3 1 5 7 1 7 1 1 6 3 0 2 9 3 1 1 0 4 9......
   2 0 0 2 0 2 7 1 8 6 4 1 6 3 4 1 9 1 3 3 9 5 4 7 7 4 2 8 5 8 6 0 3 4 6 1 9 9 6......
   0 3 7 2 8 2 9 4 4 6 4 9 7 0 9 2 7 5 1 5 9 1 2 3 1 3 5 9 1 7 6 2 8 2 2 6 0 7 4......
   9 7 8 3 2 1 1 8 3 6 1 0 3 1 0 0 1 1 2 7 3 0 4 6 5 2 6 4 7 1 8 9 9 3 0 7 1 0 2......
   0 3 5 4 6 5 8 6 3 7 5 8 0 9 1 0 3 1 2 2 3 3 6 4 7 5 0 6 2 7 9 8 5 9 2 1 1 4 4......
   5 6 4 1 2 5 3 9 3 9 0 5 9 6 5 7 4 1 3 4 0 4 8 0 4 3 6 8 7 6 0 9 7 5 7 2 1 1 6......
   8 9 4 1 5 2 2 9 0 3 9 6 7 2 0 3 5 4 3 6 5 8 9 5 4 7 4 2 7 3 4 8 9 1 9 2 1 7 9......
   1 8 7 4 1 3 1 1 0 2 3 9 4 9 2 1 6 8 4 7 7 4 4 9 2 5 7 2 4 4 2 1 9 2 2 8 7 6 9...... 
   8 2 3 8 1 6 5 1 1 0];
%´´½¨BPÍøÂç
pr(1:784,1)=0;
pr(1:784,2)=1;
t1=clock;                   %¼ÆÊ±¿ªÊ¼
%ÉèÖÃѵÁ·²ÎÊý
net=newff(pr,[25 1],{'logsig','purelin'},'traingdx','learngdm');
net.trainParam.epochs=5000;             %ÉèÖÃѵÁ·´ÎÊý
net.trainParam.goal=0.05;               %ÉèÖÃÐÔÄܺ¯Êý
net.trainParam.show=10;                 %ÿ10ÏÔʾ
net.trainParam.Ir=0.05;                 %ÉèÖÃѧϰËÙÂÊ
net=train(net,p,t);                     %ѵÁ·BPÍøÂç
datat=etime(clock,t1)                   %¼ÆËãÉè¼ÆÍøÂçµÄʱ¼äΪ66.417s
%Éú³É²âÊÔÑù±¾
pt(1:784,1)=1;                       
pl=ones(28,28);                         %³õʼ»¯28*28¶þֵͼÏñÏñËØ
for kk=401:600
    pl=ones(28,28);                     %³õʼ»¯28*28¶þֵͼÏñΪȫ°×
    m=strcat('b',int2str(kk),'.bmp');   %Á¬½Ó×Ö·ûµÃµ½Ñù±¾ÎļþÃû
    x=imread(m,'bmp');                  %¶ÁÈëÑб¾ÎļþͼÏñ
    pl=im2bw(x,0.5);                    %°ÑÑù±¾Í¼Ïñת»¯Îª¶þֵͼ
    for m=0:27                          %ÐγÉÉñ¾­ÍøÂçÊäÈëÏòÁ¿
        pt(m*28+1:(m+1)*28,kk-400)=pl(1:28,m+1);
    end
end
[a,Pf,Af]=sim(net,pt);                  %ÍøÂç·ÂÕæ
a=round(a)                              %Êä³öʶ±ð½á¹û
%²âÊÔÑù±¾¶ÔÓ¦µÄÊý×Ö£¨´Ób401.bmpµ½b600.bmp ¹²200¸ö£©£º
tl=[2 6 4 5 8 3 1 5 1 9 2 7 4 4 4 8 1 5 8 9 5 6 7 9 9 3 7 0 9......
   0 6 6 2 3 9 0 7 5 4 8 0 9 4 1 1 8 7 1 2 6 1 0 3 0 1 1 8 2 0 3 9 4 0 5 0 6 1 7......
   7 8 1 9 2 0 5 1 2 2 7 3 5 4 4 7 1 8 3 9 6 0 3 1 1 2 0 3 5 7 6 8 2 9 5 8 5 7 4...... 
   1 1 3 1 7 5 5 5 2 5 8 2 0 9 7 7 5 0 9 0 0 8 9 2 4 8 1 6 1 6 5 1 8 3 4 0 5 5 8...... 
   3 4 2 3 9 2 1 1 5 2 1 3 2 8 7 3 7 2 4 6 9 7 2 4 2 8 1 1 3 8 4 0 6 5 9 3 0 9 2......
   4 7 1 1 9 4 2 6 1 8 9 0 6 6 7];
k=0;
for i=1:200
    if a(i)==tl(i)
        k=k+1;
    end
end
rate=1.00*k/200;                        %¼ÆËã×îºóÕýÈ·ÂÊΪ0.495

【问题讨论】:

  • 我不确定您在这里要求什么。这是关于神经网络架构的问题,还是代码中存在导致不需要结果的问题?您能否提供更多信息?谢谢。
  • 是的,Matthew,它是关于神经网络的。我在 pudn 找到了这个例子,我想看看我是否正确理解了 NN 的拓扑结构(什么是输入和输出等)。谢谢

标签: matlab neural-network


【解决方案1】:

我可能是错的,因为您没有指定输出神经元的数量和数据集中每个类别的模式数量。但是,您似乎只为您的网络创建了一个输出神经元。在这种情况下,网络将所有模式分配给同一类,并且您获得的分类准确度等于先验概率。例如,如果您的数据集的前 50 个模式属于同一类,而其余模式属于不同的类,则具有一个输出的分类器会将所有模式分配给第一个类,因此您将得到前 50 个正确的类。

如果是这种情况,您应该创建一个具有 N 个输出的分类器,其中 N 是数据集中的类数。在这种情况下,分类器将对每个类进行投票,并将模式分配给输出最大的类。例如,如果您有 3 个类,并且特定模式的输出为 [0.2, 0.83, 0.6],则该模式将分配给第二个类。

此外,将图像转换为黑白可能不是最好的方法。最好将图像转换为灰度(以在一定程度上保留直方图),并使用一些归一化来补偿光照差异。

最后,请记住,神经网络本质上是检测输入向量之间的相似性。所以,如果你需要对图片进行分类,你需要找到一种表示,使相似的图像产生相似的输入向量。将像素值输入分类器不是这样的表示。例如,如果将图像倒置,输入向量会完全改变,即使它仍然显示相同的对象。你不想要那个。您想要的特征取决于显示的对象,而不是光照/角度等。但是,提取这些特征完全是另一回事(例如,参见 OpenCV 框架中的 image preprocessingfeature extraction 的一些示例,标准图像C++/python 中的处理和计算机视觉工具)

如果你对神经网络感兴趣而不是图像处理,最好从UCI repository 中的一些标准分类问题开始(例如鸢尾花,威斯康星州乳腺癌),并与它们一起练习,直到你产生好结果并且对您正在使用的工具感到满意。

【讨论】:

  • 那么输入神经元呢,784是正确的还是?这不是我的设计,它来自 pudn.com 上的一些示例。我会等你修改答案,但你是 100% 正确的,而且我认为你对 ANN 了解很多,因为你猜到前 50 张图像会被猜对。在 MATLAB R2010a 中运行时,此 ANN 的成功率为 25% +/- 0.1% :)。我明天会接受答案,所以我不会破坏你的编辑。 PS bluenote 来自“TheSting”?
  • 如果您将像素输入网络,28*28=784 是正确的。但是,这通常不是一个好主意(我编辑了答案以获取详细信息)。 PS:布鲁斯吉他音阶中的“bluenote”,我不记得电影中的马了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-20
  • 2021-01-23
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
相关资源
最近更新 更多