func TrainRBM() { train_file := "./data_0.dat" validation_file := "./data_1.dat" class_sizes := []int{4, 2, 5, 1} hidden_layer_size := 2 train_data_accessor := rbm.NewInstanceLoader(train_file, len(class_sizes)) defer train_data_accessor.Close() validation_data_accessor := rbm.NewInstanceLoader(validation_file, len(class_sizes)) defer validation_data_accessor.Close() class_biases, y_bias := rbm.GetBiases(class_sizes, train_data_accessor) var rbm_m rbm.SparseClassRBM (&rbm_m).Initialize(class_sizes, class_biases, hidden_layer_size, y_bias) var trainer rbm.RBMTrainer learning_rate := rbm.WeightT(0.001) regularization := rbm.WeightT(0.0) momentum := rbm.WeightT(0.0) gen_learning_imp := rbm.WeightT(0.0) gibs_chain_len := 1 trainer.Initialize(&rbm_m, train_data_accessor, validation_data_accessor, learning_rate, regularization, momentum, gen_learning_imp, gibs_chain_len) trainer.Train() //Evaluate RBM // test_file := "./data_2.dat" }
func GenTrainData() { rand.Seed(time.Now().Unix()) model := SimpleModel{ [][]rbm.WeightT{ { 0.1, 0.2, 0.3, 0.4, }, { 0.5, 0.5, }, { 0.7, 0.01, 0.09, 0.1, 0.1, }, { 1.0, }, }, [][]rbm.WeightT{ { 0.2, -0.3, 1.2, 3.5, }, { 0.2, 0.3, }, { -0.01, 0.39, 0.2, -1.0, 0.09, }, { 1.0, }, }, 0.8, 0.0, } instance_cnt := []int{100000, 20000, 40000} prefix := "./data" for i, c := range instance_cnt { out_fd, err := os.Create(fmt.Sprintf("%s_%d.dat", prefix, i)) if err != nil { fmt.Printf("Failed to create file: %s, %s.\n", out_fd, err) return } defer out_fd.Close() for j := 0; j < c; j++ { x, y := model.GenerateInstance() out_fd.WriteString(InstanceToString(x, y) + "\n") } } validation_file := "./data_1.dat" validation_data_accessor := rbm.NewInstanceLoader(validation_file, len(model.feature_distribution)) defer validation_data_accessor.Close() validation_auc := rbm.ROCAuc(model, validation_data_accessor) log_likelihood := rbm.LogLikelihood(model, validation_data_accessor) rmse := rbm.RMSE(model, validation_data_accessor) fmt.Printf("Max Validation AUC: %f\n", validation_auc) fmt.Printf("Max Validation LogLikelihood: %f\n", log_likelihood) fmt.Printf("max RMSE: %f\n", rmse) }