public float TestAll() { int correct = 0; for (int i = 0; i < testing.Length; i++) { DoodleData data = testing[i]; List <float> inputs = new List <float>(); for (int j = 0; j < data.val.Length; j++) { inputs.Add(data.val[j] / 255.0f); } eDoodleCategory label = data.label; float[] guess = nn.predict(inputs).ToArray(); float m = Mathf.Max(guess); int classification = System.Array.IndexOf(guess, m); if (classification == (int)label) { correct++; } } float percent = 100f * (float)correct / testing.Length; return(percent); }
private void PrepareData(Category category, byte[] data, eDoodleCategory label) { int trainingdata_num = (int)(useTrainingData * total_data); category.training = new DoodleData[trainingdata_num]; category.testing = new DoodleData[total_data - trainingdata_num]; for (int i = 0; i < total_data; i++) { int offset = i * len; int strat = offset; int end = (offset + len) - 1; if (i < trainingdata_num) { // training data category.training[i] = new DoodleData(); category.training[i].val = NNUtils.SubArray(data, strat, end); category.training[i].label = label; } else { // testing data category.testing[i - trainingdata_num] = new DoodleData(); category.testing[i - trainingdata_num].val = NNUtils.SubArray(data, strat, end); category.testing[i - trainingdata_num].label = label; } } }
public void TrainEpoch() { classifierState = eClassifierState.TRAIN; training = NNUtils.Shuffle(training); for (int i = 0; i < training.Length; i++) { DoodleData data = training[i]; List <float> inputs = new List <float>(); for (int j = 0; j < data.val.Length; j++) { inputs.Add(data.val[j] / 255.0f); } eDoodleCategory label = data.label; List <float> targets = new List <float>() { 0f, 0f, 0f }; targets[(int)label] = 1; nn.train(inputs, targets); } classifierState = eClassifierState.NONE; }