public void compute(double[] data){
		assert(data.length == input_nodes);
		
		//Set initial net values
		boolean first = true;
		for (Node[] layer: layers){
			for (int j=0; j<layer.length; j++){
				Node temp = layer[j];
				//Input node
				if (first && j < data.length)
					temp.net = data[j];
				//Bias node
				else if (temp.is_bias)
					temp.net = 1;
				//Default node, reset net value
				else temp.net = 0;
				//Reset training error
				temp.err = 0;
				temp.out = 0;
			}
			first = false;
		}
		
		//Go through each layer, incrementally, and compute net values
		first = true;
		for (Node[] layer: layers){
			//Compute net values
			for (Node in: layer){
				//Compute activation function (sigmoid)
				in.out = first ? in.net : 1/(1+Math.exp(-in.net));
				for (int i=0, l=in.links_out.size(); i<l; i++)
					in.links_out.get(i).net += in.out*in.weights.get(i);
			}
			first = false;
		}
	}