package com.rahul.trainer;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import com.rahul.deeplearning.dA.dA;
public class DenoisingAutoencoder {
private static float getError(int[] input, double[] output) {
int error = 0;
for (int i = 0; i < input.length; i++) {
if (input[i] != Math.round(output[i]))
error++;
}
return (float) error / input.length;
}
private static void prettyPrint(int[] input, double[] output) {
System.out.println();
for (int i = 0; i < input.length; i++) {
System.out.print(input[i]);
}
System.out.println();
for (int i = 0; i < output.length; i++) {
System.out.print(Math.round(output[i]));
}
System.out.println();
}
private static void test_dA(int[][] train_X) {
Random rng = new Random(123);
double learning_rate = 0.1;
double corruption_level = 0.0;
int training_epochs = 100;
int train_N = train_X.length;
int test_N = 100;
int n_visible = train_X[0].length;
int n_hidden = 200;
dA da = new dA(train_N, n_visible, n_hidden, null, null, null, rng);
// train
for (int epoch = 0; epoch < training_epochs; epoch++) {
for (int i = 0; i < train_N; i++) {
da.train(train_X[i], learning_rate, corruption_level);
}
}
// test data
int[][] test_X = new int[test_N][];
for (int i = 0; i < test_N; i++) {
int randomIndex = (int) (Math.random() * train_N);
test_X[i] = train_X[randomIndex];
}
double[][] reconstructed_X = new double[test_N][n_visible];
// test
for (int i = 0; i < test_N; i++) {
da.reconstruct(test_X[i], reconstructed_X[i]);
prettyPrint(test_X[i], reconstructed_X[i]);
System.out.println(getError(test_X[i], reconstructed_X[i]));
}
}
public static void main(String[] args) {
// int[][] trainData =
// PrepareData.inputToIntMatrix("./data/bitboards_game4.bb");
int[][] trainData = PrepareData.doubleToIntMatrix(PrepareData
.getNumBoardData("./data/numboards_game4.bb"));
Normalizer.normalize(trainData);
test_dA(trainData);
}
}