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" }
// Predict makes a prediction with the given input. func (m *SimpleModel) Predict(x []int, noise rbm.WeightT) rbm.WeightT { w := rbm.WeightT(0) for i, k := range x { w += m.feature_weights[i][k] } w += noise return Sigmoid(w) }
// GenerateInstance generates a data sample form the given model. func (m *SimpleModel) GenerateInstance() ([]int, int) { x := make([]int, len(m.feature_distribution)) for i, v := range m.feature_distribution { k := SelectKFromDist(rbm.WeightT(rand.Float64()), v) x[i] = k } y := 0 if m.Predict(x, m.noise_std) > m.threshold { y = 1 } return x, y }
func Sigmoid(x rbm.WeightT) rbm.WeightT { x_exp := math.Exp(float64(x)) return rbm.WeightT(x_exp / (1 + x_exp)) }