【问题标题】:Feed features for the Neural Network神经网络的馈送特征
【发布时间】:2011-07-30 12:52:02
【问题描述】:

根据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 时出错 论据维度不是 持续的。 ==> minmax 在 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]

【问题讨论】:

    标签: matlab neural-network


    【解决方案1】:

    您应该看看 Itamar Katz 的建议。

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

    例如以下无效:[ zeros(5,5), one(4,4) ]

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

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

    作为建议,我愿意花几个小时来真正理解 MATLAB 中的矩阵。然后您可以更有效地推进您的工作。

    【讨论】:

    • 如果我不能连接不同大小的矩阵,我如何将筛选特征描述符添加到我的特征中。在我训练我的图像之前,我没有使用这个筛选特征描述符,它训练得很好。即使我没有使用单元格数组,因为所有功能都只有 1x1 双精度值。但是,现在我想将此筛选描述符添加到我的功能文件中。根据 sift 算法返回的关键点,它不止一行,尽管对于一张图像的其他特征,只有一行。有什么办法可以让这个筛选功能集中到一行?
    • 是否可以对从 sift 返回的特定列的所有行中的值求和。那么对于那一列我只能有一行?如果我这样做,筛选的功能会运作良好吗?我对matlab了解不多。你能帮帮我吗?
    【解决方案2】:

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

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

    只是覆盖FeaturesTest 使其成为一个元胞数组,因此之前的所有行都无关紧要。

    我猜你需要这样的东西:

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

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

    【讨论】:

    • 谢谢。在特征提取函数中,特征是这样返回的。 FeaturesTest.nWhite = nWhite; FeaturesTest.descriptors = 描述符; FeaturesTest.roundness = 圆度; FeaturesTest.color = 颜色; FeaturesTest.outputs = 输出;然后 FeaturesTest = {圆度,nWhite,颜色,描述符};假设一个图像的圆度是 颜色是 nWhite 是 描述符是 并且输出是 将训练 18 个硬币。所以具有输入和输出的 FeaturesTest 是
    • 请参考我上面的问题。我对其进行了编辑以提供您要求的尺寸。谢谢
    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2020-04-29
    • 1970-01-01
    • 2015-12-28
    • 2018-10-22
    • 2011-12-23
    相关资源
    最近更新 更多