Path: blob/master/models/feedforward.py
411 views
from .__init__ import BayesianModel1import theano2import theano.tensor as tt3import numpy as np4import pymc3 as pm567class ForestCoverModel(BayesianModel):89def __init__(self, n_hidden):10super(ForestCoverModel, self).__init__()11self.n_hidden = n_hidden1213def create_model(self, X=None, y=None):14if X:15num_samples, self.num_pred = X.shape1617if y:18num_samples, self.num_out = Y.shape1920model_input = theano.shared(np.zeros(shape=(1, self.num_pred)))21model_output = theano.shared(np.zeros(self.num_out))2223self.shared_vars = {24'model_input': model_input,25'model_output': model_output26}2728with pm.Model() as model:29# Define weights30weights_1 = pm.Normal('w_1', mu=0, sd=1,31shape=(self.num_pred, self.n_hidden))32weights_2 = pm.Normal('w_2', mu=0, sd=1,33shape=(self.n_hidden, self.n_hidden))34weights_out = pm.Normal('w_out', mu=0, sd=1,35shape=(self.n_hidden, self.num_outs))3637# Define activations38acts_1 = tt.tanh(tt.dot(model_input, weights_1))39acts_2 = tt.tanh(tt.dot(acts_1, weights_2))40acts_out = tt.nnet.softmax(tt.dot(acts_2, weights_out)) # noqa4142# Define likelihood43out = pm.Multinomial('likelihood', n=1, p=acts_out,44observed=model_output)4546return model474849def fit(self, X, y, n=200000, batch_size=10):50"""51Train the Bayesian NN model.52"""53num_samples, self.num_pred = X.shape5455if self.cached_model is None:56self.cached_model = self.create_model()5758with self.cached_model:59minibatches = {60self.shared_vars['model_input']: pm.Minibatch(X, batch_size=batch_size),61self.shared_vars['model_output']: pm.Minibatch(y, batch_size=batch_size),62}63self._inference(minibatches, n)6465return self666768697071