def __init__(self, number_words, num_hidden, seq_length, mb_size):
self.mb_size = mb_size
x = T.imatrix()
target = T.ivector()
word_embeddings = theano.shared(np.random.normal(size = ((number_words, 1, num_hidden))).astype('float32'))
feature_lst = []
for i in range(0, seq_length):
feature = word_embeddings[x[:,i]]
feature_lst.append(feature)
features = T.concatenate(feature_lst, 1)
#example x sequence_position x feature
#inp = InputLayer(shape = (seq_length, mb_size, num_hidden), input_var = features)
l_lstm_1 = LSTMLayer((seq_length, mb_size, num_hidden), num_units = num_hidden, nonlinearity = lasagne.nonlinearities.tanh)
l_lstm_2 = LSTMLayer((seq_length, mb_size, num_hidden), num_units = num_hidden, nonlinearity = lasagne.nonlinearities.tanh)
#minibatch x sequence x feature
final_out = T.mean(l_lstm_2.get_output_for([l_lstm_1.get_output_for([features])]), axis = 1)
#final_out = T.mean(features, axis = 1)
h_out = DenseLayer((mb_size, num_hidden), num_units = 1, nonlinearity=None)
h_out_value = h_out.get_output_for(final_out)
classification = T.nnet.sigmoid(h_out_value)
self.loss = T.mean(T.nnet.binary_crossentropy(output = classification.flatten(), target = target))
self.params = lasagne.layers.get_all_params(h_out,trainable=True) + [word_embeddings] + lasagne.layers.get_all_params(l_lstm_1, trainable = True) + lasagne.layers.get_all_params(l_lstm_2, trainable = True)
updates = lasagne.updates.adam(self.loss, self.params)
self.train_func = theano.function(inputs = [x, target], outputs = {'l' : self.loss, 'c' : classification}, updates = updates)
self.evaluate_func = theano.function(inputs = [x], outputs = {'c' : classification})
评论列表
文章目录