Функции фида для нейронной сети - PullRequest
2 голосов
/ 06 апреля 2011

Согласно последнему вопросу я смог сохранить набор функций, используя предоставленный метод.

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

Теперь мои первые 4 функции введены в нейронную сеть, а пятая - цель. Я написал так.

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,:}]);

Кто-нибудь имеет представление об этом, пожалуйста?


@ Итамар Кац Спасибо, что показали мне использование массива ячеек и структуры. Я изменил это сейчас. Есть такая функция, которая возвращает функции для одного изображения. для округлости и 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.

Пожалуйста, помогите мне. Спасибо.

Файл

features.mat для 6 изображений выглядит следующим образом

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 голосов
/ 06 апреля 2011

Вы должны посмотреть на то, что предлагает Итамар Кац.

Я хочу добавить следующее: Я думаю, что суть проблемы (для обоих ваших вопросов) в том, что вы не понимаете, что в MATLAB вы не можете объединять матрицы разного размера.

например, следующее недопустимо: [нули (5,5), единицы (4,4)]

если вы попытаетесь это сделать, вы получите точно такую ​​же ошибку, что и вы.

оператор матрицы (:) (см. Ответ Itemar) преобразует его в 1-й массив, и поэтому многие вещи можно объединить.

В качестве предложения я потрачу пару часов, чтобы по-настоящему понять матрицы в MATLAB. Тогда вы сможете более эффективно продвигаться в своей работе.

0 голосов
/ 06 апреля 2011

Ответ, на который вы ссылались, предлагал использовать либо массив ячеек, или структуру с полями, но вы делаете и , и свою последнюю строку:

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

просто перезаписывает FeaturesTest, превращая его в массив ячеек, поэтому все предыдущие строки не имеют значения.

Полагаю, вам нужно что-то вроде этого:

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

Однако, если вы предоставите информацию о размерах каждого поля, вам будет легче найти ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...