Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear all
- close all
- Data=importfile('fashion-mnist_train.csv',2,inf);
- input = Data(:,2:end);
- target= Data(:,1);
- Data=importfile('fashion-mnist_test.csv',2,inf);
- input_test = Data(:,2:end);
- target_test= Data(:,1);
- clearvars Data;
- target_string={0 'T-shirt/top';
- 1 'Trouser';
- 2 'Pullover';
- 3 'Dress';
- 4 'Coat';
- 5 'Sandal';
- 6 'Shirt';
- 7 'Sneaker';
- 8 'Bag';
- 9 'Ankle boot'};
- figure;
- colormap(gray);
- perm = randperm(60000,20);
- for i = 1:20
- subplot(4,5,i);
- display_array=reshape(input(perm(i),:),[28 28]);
- imshow(display_array',[]);
- xlabel(target_string{target(perm(i))+1,2});
- end
- % A partir deste ponto os dados já estão importados para o ambiente.
- % Entretanto você tem de atentar que:
- % - as entradas e saídas para uma rede neural no MATLAB estão nas linhas
- % da matriz;
- % - se o problema é de classificação é desejável codificar as
- % saídas categóricas usando o esquema "onehot" onde cada neurônio da camada
- % de saída codifica uma dada categoria.
- % esquema onehot para a entrada
- train_output = zeros(10, 60000);
- test_output = zeros(10, 10000);
- confusion_matrix = zeros(10, 60000);
- confusion_test_matrix = zeros(10, 10000);
- for i = 1:60000
- if target(i, 1) == 0
- train_output(1, i) = 1;
- elseif target(i, 1) == 1
- train_output(2, i) = 1;
- elseif target(i, 1) == 2
- train_output(3, i) = 1;
- elseif target(i, 1) == 3
- train_output(4, i) = 1;
- elseif target(i, 1) == 4
- train_output(5, i) = 1;
- elseif target(i, 1) == 5
- train_output(6, i) = 1;
- elseif target(i, 1) == 6
- train_output(7, i) = 1;
- elseif target(i, 1) == 7
- train_output(8, i) = 1;
- elseif target(i, 1) == 8
- train_output(9, i) = 1;
- else
- train_output(10, i) = 1;
- end
- end
- %esquema onehot para os testes
- for i = 1:10000
- if target_test(i, 1) == 0
- test_output(1, i) = 1;
- elseif target_test(i, 1) == 1
- test_output(2, i) = 1;
- elseif target_test(i, 1) == 2
- test_output(3, i) = 1;
- elseif target_test(i, 1) == 3
- test_output(4, i) = 1;
- elseif target_test(i, 1) == 4
- test_output(5, i) = 1;
- elseif target_test(i, 1) == 5
- test_output(6, i) = 1;
- elseif target_test(i, 1) == 6
- test_output(7, i) = 1;
- elseif target_test(i, 1) == 7
- test_output(8, i) = 1;
- elseif target_test(i, 1) == 8
- test_output(9, i) = 1;
- else
- test_output(10, i) = 1;
- end
- end
- % normalização dos dados
- a_train = min(input(:));
- b_train = max(input(:));
- ra_train = 1;
- rb_train = -1;
- a_test = min(input_test(:));
- b_test = max(input_test(:));
- ra_test = 1;
- rb_test = -1;
- data_train = transpose((((ra_train-rb_train)*(input-a_train))/(b_train - a_train)) + rb_train);
- data_test = transpose((((ra_test-rb_test)*(input_test-a_test))/(b_test - a_test)) + rb_test);
- % criação da rede neural
- net = newff(data_train, train_output, [11 7], {'tansig', 'tansig'}, 'traingdx');
- net.trainParam.epochs = 500;
- net.trainParam.goal = 0.01;
- net.trainParam.lr = 0.01;
- net.divideParam.trainRatio = 0.8;
- net.divideParam.valRatio = 0.2;
- net.divideParam.testRatio = 0;
- % treinamento da rede
- net = train(net, data_train, train_output);
- % simulação da rede
- Y = sim(net, data_train);
- Y_t = sim(net, data_test);
- % confusion matrix
- for i = 1:60000
- x = max([Y(1,i), Y(2,i), Y(3, i), Y(4, i), Y(5, i), Y(6, i), Y(7, i), Y(8, i), Y(9, i), Y(10, i)]);
- for j = 1:10
- if Y(j, i) == x
- confusion_matrix(j, i) = 1;
- end
- end
- end
- figure;
- plotconfusion(train_output, confusion_matrix);
- for i = 1:10000
- x = max([Y_t(1,i), Y_t(2,i), Y_t(3, i), Y_t(4, i), Y_t(5, i), Y_t(6, i), Y_t(7, i), Y_t(8, i), Y_t(9, i), Y_t(10, i)]);
- for j = 1:10
- if Y_t(j, i) == x
- confusion_test_matrix(j, i) = 1;
- end
- end
- end
- figure;
- plotconfusion(test_output, confusion_test_matrix);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement