artificial neural network issue : Error using * and .*

hello, What's going with my code : l got back this error : *Error using * Inner matrix dimensions must agree. Error in ann_classifier (line 48) hidden_output = [1; sigmf(W1'*input_x, [beta 0])];
and when l replace * by .* l go the same error:
Error using .*
here is my code :
% load training set and testing set
clear all;
train_set = loadMNISTImages('/home/anelmad/Desktop/TER/mnist_ml2/MNIST_digit_recognition-master/load_data/train-images.idx3-ubyte');
train_label = loadMNISTLabels('/home/anelmad/Desktop/TER/mnist_ml2/MNIST_digit_recognition-master/load_data/train-labels.idx1-ubyte');
test_set = loadMNISTImages('/home/anelmad/Desktop/TER/mnist_ml2/MNIST_digit_recognition-master/load_data/t10k-images.idx3-ubyte');
test_label = loadMNISTLabels('/home/anelmad/Desktop/TER/mnist_ml2/MNIST_digit_recognition-master/load_data/t10k-labels.idx1-ubyte');
% parameter setting
alpha = 0.1; % learning rate
beta = 0.01; % scaling factor for sigmoid function
train_size = size(train_set);
N = train_size(1); % number of training samples
D = train_size(2); % dimension of feature vector
n_hidden = 300; % number of hidden layer units
K = 10; % number of output layer units
% initialize all weights between -1 and 1
W1 = 2*rand(1+D, n_hidden)-1; % weight matrix from input layer to hidden layer
W2 = 2*rand(1+n_hidden, K)-1; % weight matrix from hidden layer to ouput layer
max_iter = 100; % number of iterations
Y = eye(K); % output vector
% training
for i=1:max_iter
disp([num2str(i), ' iteration']);
for j=1:N
% propagate the input forward through the network
input_x = [1; train_set(j, :)'];
hidden_output = [1;sigmf(W1'*input_x, [beta 0])];
output = sigmf(W2'*hidden_output, [beta 0]);
% propagate the error backward through the network
% compute the error of output unit c
delta_c = (output-Y(:,train_label(j)+1)).*output.*(1-output);
% compute the error of hidden unit h
delta_h = (W2*delta_c).*(hidden_output).*(1-hidden_output);
delta_h = delta_h(2:end);
% update weight matrix
W1 = W1 - alpha*(input_x*delta_h');
W2 = W2 - alpha*(hidden_output*delta_c');
end
end
% testing
test_size = size(test_set);
num_correct = 0;
for i=1:test_size(1)
input_x = [1; test_set(i,:)'];
hidden_output = [1; sigmf(W1'*input_x, [beta 0])];
output = sigmf(W2'*hidden_output, [beta 0]);
[max_unit, max_idx] = max(output);
if(max_idx == test_label(i)+1)
num_correct = num_correct + 1;
end
end
% computing accuracy
accuracy = num_correct/test_size(1);
thank you

2 Kommentare

MiMad
MiMad am 20 Mär. 2016
l tried .* instead of * the same error
MiMad
MiMad am 21 Mär. 2016
both .* and * don't work

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Greg Heath
Greg Heath am 21 Mär. 2016

0 Stimmen

If you get an inner dimension multiplication error for
C = A*B
Then check the inner dimensions via
whos A B
You can use * only if size(A,2) = size(B,1), i.e., the inner dimensions are equal.
Hope this helps.
Thank you for formally accepting my answer
P.S. Why didn't you point out which equation is number 48?

Weitere Antworten (1)

Greg Heath
Greg Heath am 21 Mär. 2016

0 Stimmen

The answer is relatively simple:
If the dimensions do not agree, then what are they
whos
and what should they be?
Hope this helps
Thank you for formally accepting my answer
Greg

1 Kommentar

MiMad
MiMad am 21 Mär. 2016
l don't understand how to fix the problem with whos ?. All what l know is that : size(test_point) = 1 10000 size(train-point)= 1 60000
Cheers

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Deep Learning Toolbox finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 20 Mär. 2016

Beantwortet:

am 21 Mär. 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by