Getting NaN values in neural network weight matrices
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Tulasi Ram Tammu
el 23 de Oct. de 2016
Comentada: Tulasi Ram Tammu
el 24 de Oct. de 2016
I am trying to develop a feedforward NN in MATLAB. I have a dataset of 12 inputs and 1 output with 46998 samples. I have some NaN values in last rows of Matrix, because some inputs are accelerations & velocities which are 1 & 2 steps less respectively than displacements. With this current data set I am getting w1_grad & w2_grad as NaN matrices. I tried to remove them using
Heave_dataset(isnan(Heave_dataset))=[];
but my dataset is getting converted into a column matrix of (1*610964).
can anyone help me with this ?
clc;
clear all;
close all;
mkdir('Results//'); %Directory for Storing Results
%%Configurations/Parameters
load 'Heave_dataset'
% Heave_dataset(isnan(Heave_dataset))=[];
nbrOfNeuronsInEachHiddenLayer = 24;
nbrOfOutUnits = 1;
unipolarBipolarSelector = -1; %0 for Unipolar, -1 for Bipolar
learningRate = 0.08;
nbrOfEpochs_max = 50000;
%%Read Data
Input = Heave_dataset(:, 1:length(Heave_dataset(1,:))-1);
TargetClasses = Heave_dataset(:, length(Heave_dataset(1,:)));
%%Calculate Number of Input and Output NodesActivations
nbrOfInputNodes = length(Input(1,:)); %=Dimention of Any Input Samples
nbrOfLayers = 2 + length(nbrOfNeuronsInEachHiddenLayer);
nbrOfNodesPerLayer = [nbrOfInputNodes nbrOfNeuronsInEachHiddenLayer nbrOfOutUnits];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Forward Pass %%%%%%%%%%%
%%Adding the Bias to Input layer
Input = [ones(length(Input(:,1)),1) Input];
%%Weights leading from input layer to hidden layer is w1
w1 = rand(nbrOfNeuronsInEachHiddenLayer,(nbrOfInputNodes+1));
%%Input & output of hidde layer
hiddenlayer_input = Input*w1';
hiddenlayer_output = -1 + 2./(1 + exp(-(hiddenlayer_input)));
%%Adding the Bias to hidden layer
hiddenlayer_output = [ones(length(hiddenlayer_output(:,1)),1) hiddenlayer_output];
%%Weights leading from input layer to hidden layer is w1
w2 = rand(nbrOfOutUnits,(nbrOfNeuronsInEachHiddenLayer+1));
%%Input & output of hidde layer
outerlayer_input = hiddenlayer_output*w2';
outerlayer_output = outerlayer_input;
%%Error Calculation
TotalError = 0.5*(TargetClasses-outerlayer_output).^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Backward Pass %%%%%%%%%%%
d3 = outerlayer_output - TargetClasses;
d2 = (d3*w2).*hiddenlayer_output.*(1-hiddenlayer_output);
d2 = d2(:,2:end);
D1 = d2' * Input;
D2 = d3' * hiddenlayer_output;
w1_grad = D1/46998 + learningRate*[zeros(size(w1,1),1) w1(:,2:end)]/46998;
w2_grad = D2/46998 + learningRate*[zeros(size(w2,1),1) w2(:,2:end)]/46998;
0 comentarios
Respuesta aceptada
Greg Heath
el 24 de Oct. de 2016
Remove all input and corresponding output vectors if EITHER OR BOTH contain NaNs.
Hope this helps
Thank you for formally accepting my answer
Greg
Más respuestas (1)
Teja Muppirala
el 24 de Oct. de 2016
Editada: Teja Muppirala
el 24 de Oct. de 2016
Heave_dataset = rmmissing(Heave_dataset);
Or you can do it like this.
Heave_dataset(any(isnan(Heave_dataset),2),:)=[];
You might want to make this two lines, just to be more readable.
missingRows = any(isnan(Heave_dataset),2);
Heave_dataset(missingRows,:) = [];
The way you have written now, it removes the NaN values, but not the rows, so it has to turn the matrix into a long vector of all the values.
Ver también
Categorías
Más información sobre Sequence and Numeric Feature Data Workflows en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!