Skip to content

Instantly share code, notes, and snippets.

@ebenolson
Created November 17, 2015 20:01
Show Gist options
  • Save ebenolson/dde14e0e1a38b8140eb9 to your computer and use it in GitHub Desktop.
Save ebenolson/dde14e0e1a38b8140eb9 to your computer and use it in GitHub Desktop.
import theano, numpy
from theano import tensor as T
import lasagne
#fake data, same shapes
train_in = numpy.zeros((100,46,30)).astype('float32')
train_out = numpy.zeros((100,46)).astype('int32')
mask_train = numpy.zeros((100,46)).astype('float32')
input_var = T.tensor3('input_var')
mask_var = theano.shared(mask_train)
target_var = T.imatrix('target_var')
#################
## BUILD MODEL ##
#################
num_inputs, num_units, num_classes = 100, 300, 127
l_inp = lasagne.layers.InputLayer((num_inputs, 46, 30), input_var=input_var)
l_mask = lasagne.layers.InputLayer((num_inputs, 46), input_var=mask_var)
l_lstm = lasagne.layers.LSTMLayer(l_inp, num_units=num_units,
ingate=lasagne.layers.Gate(),
forgetgate=lasagne.layers.Gate(),
cell=lasagne.layers.Gate(
W_cell=None, nonlinearity=lasagne.nonlinearities.tanh),
outgate=lasagne.layers.Gate(),
nonlinearity=lasagne.nonlinearities.tanh,
cell_init=lasagne.init.Constant(0.),
hid_init=lasagne.init.Constant(0.), backwards=False, learn_init=False,
peepholes=True, gradient_steps=-1, grad_clipping=0, unroll_scan=False,
precompute_input=True, mask_input=l_mask)
l_shp = lasagne.layers.ReshapeLayer(l_lstm, (-1, num_units))
l_den = lasagne.layers.DenseLayer(l_shp, num_classes, nonlinearity=lasagne.nonlinearities.softmax)
l_out = lasagne.layers.ReshapeLayer(l_den, (-1, 46, num_classes))
prediction = lasagne.layers.get_output(l_out)
loss = lasagne.objectives.categorical_crossentropy(prediction.reshape((-1,num_classes)), target_var.flatten())
loss = lasagne.objectives.aggregate(loss, mask_var.flatten())
params = lasagne.layers.get_all_params(l_out, trainable=True)
print "Computing updates ..."
updates = lasagne.updates.nesterov_momentum(loss, params, learning_rate=0.01, momentum=0.9)
print "Compiling functions ..."
train_fn = theano.function([input_var, target_var], loss, updates=updates)
train_fn(train_in,train_out)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment