神经网络的馈送功能

时间:2011-04-06 05:41:06

标签: matlab neural-network

根据last question,我能够使用已提供的方法保存功能集。

FeaturesTest.roundness = roundness;    
FeaturesTest.nWhite = nWhite;   
FeaturesTest.color = color;   
FeaturesTest.descriptors = descriptors;  
FeaturesTest.outputs =  outputs;   
FeaturesTest = {roundness,nWhite, color, descriptors, outputs};

现在我的前4个特征输入到神经网络,第5个特征是目标。我是这样写的。

load('features.mat','FeaturesTest');  
A = FeaturesTest;   
P=A(:,1:4)';  
T=A(:,5:5)';  
rand('seed', 491218382);  
net = newff(minmax(P),T,20);

现在输入功能出现同样的错误......

  

???使用==>时出错horzcat CAT   参数维度不是   是一致的。 ==>中的错误最小值为38   pr {i} = minmax([p {i,:}]);

有人对此有所了解吗?


@Itamar Katz感谢您向我展示了单元格数组和结构体的两种用法。我现在改了。有一个这样的函数可以返回一个图像的特征。圆度和nWhite只有一个值。描述符是移位描述符。有5种类型的输出。对于第一个图像输出应为1,对于第二个,2,依此类推。颜色在.mat文件[196,186,177]中显示如下。输出类似于[1,0,0,0,0]。

function[FeaturesTest] = features(image)
[siftImage, descriptors, locs] = sift(image); 
FeaturesTest = {roundness, nWhite, color, descriptors, outputs};

现在从训练集中逐个拍摄图像,并为每个图像调用上面的函数。

for i=1:size(list, 1);
    if (~(list(i).isdir))
        [FeatureSet] = features(fullfile('F:\ProjectWork\Coin_Recognition\TrainingSet', list(i).name));
        Features = [Features; FeatureSet];
    end
end
save('features.mat','Features');

现在我想训练这个功能。我做的是

load('features.mat','Features');
A = Features;
P=A(:,1:4)';
T=A(:,5:5)';
rand('seed', 491218382);
net = newff(minmax(P),T,20);
Error comes here.

请帮帮我。感谢。

6张图片的features.mat文件就像这样

0.776914651509411   1874    [196,186,177]   <14x128 double>
    [1,0,0,0,0]
0.839974548665116   1794    [219,213,202]   <7x128 double>
    [1,0,0,0,0]
0.841707612525928   1796    [192,182,171]   <5x128 double>
    [1,0,0,0,0]
0.861761793121658   1783    [202,199,192]   <13x128 double>
    [1,0,0,0,0]
0.411077484660635   3689    [97,88,72]  <238x128 double>
    [0,1,0,0,0]
0.844865287736163   3372    [166,139,89]    <228x128 double>
    [0,1,0,0,0]

2 个答案:

答案 0 :(得分:0)

您链接到的答案建议使用单元格数组,带字段的结构,但您正在执行两者,以及您的最后一行:

FeaturesTest = {roundness,nWhite, color, descriptors, outputs};

只是覆盖FeaturesTest使它成为一个单元格数组,所以之前的所有行都无关紧要。

我猜你需要这样的东西:

P = [roundness(:), nWhite(:), color(:), descriptors(:)];
T = outputs(:);

但是,如果您提供有关每个字段的维度的信息,则可以更轻松地帮助您找到错误。

答案 1 :(得分:0)

你应该看看Itamar Katz的建议。

我想补充以下内容:我认为问题的核心(对于你的两个问题)是你不明白在MATLAB中你不能连接不同大小的矩阵。

例如以下内容无效:[零(5,5),(4,4)]

如果您尝试这样,您将得到完全相同的错误。

matrix(:)运算符(参见Itemar的答案)将其转换为1-d数组,因此可以连接很多东西。

作为一个建议,我花了几个小时来真正理解MATLAB中的矩阵。然后,您可以更有效地提高工作效率。