根据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]
答案 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中的矩阵。然后,您可以更有效地提高工作效率。