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
采纳的回答
更多回答(1 个)
Greg Heath
2016-3-21
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
类别
在 帮助中心 和 File Exchange 中查找有关 Deep Learning Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!