def test_training_performance(self): n = NoOutputLstm(100, 80) training_data = [] for _ in range(30): xs = np.asarray([np.random.uniform(size=100), np.random.uniform(size=100), np.random.uniform(size=100), np.random.uniform(size=100), np.random.uniform(size=100), np.random.uniform(size=100), np.random.uniform(size=100), np.random.uniform(size=100)]) h0 = np.random.uniform(size=80) t = np.random.uniform(size=80) training_data.append((xs, h0, t)) epochs = 100 start = time.time() for _ in range(epochs): for xs, h0, t in training_data: intermediate_results = {} h_last = n.forward_prop(xs, h0, intermediate_results) n.back_prop(ce_err_prime(h_last, t), intermediate_results) n.train(0.1, intermediate_results) end = time.time() time_taken = end - start print(str(epochs) + " training epochs took " + str(time_taken) + " seconds")
def test_learn_word_vectors_from_char_vector_sequence(self): text = "please learn how to infer word vectors from sequences of character vectors" index_to_word = list(set(text.split())) index_to_char = list(set(text)) word_to_index = { word: index for index, word in enumerate(index_to_word) } char_to_index = { word: index for index, word in enumerate(index_to_char) } def to_char_vector_sequence(word): sequence = [] for char in word: vector = np.ones(len(char_to_index)) * -1 vector[char_to_index[char]] = 1 sequence.append(vector) sequence.append(np.zeros(len(char_to_index))) return np.asarray(sequence) def to_word_vector(word): vector = np.ones(len(word_to_index)) * -1 vector[word_to_index[word]] = 1 return vector training_data = [(to_char_vector_sequence(word), to_word_vector(word)) for word in text.split()] n = NoOutputLstm(len(index_to_char), len(index_to_word)) for i in range(1000): for char_vectors, word_vector in training_data: intermediate_results = {} h_last = n.forward_prop(char_vectors, np.zeros(len(index_to_word)), intermediate_results) n.back_prop(ce_err_prime(h_last, word_vector), intermediate_results) n.train(0.1, intermediate_results) if i % 200 == 0: total_err = 0 for char_vectors, word_vector in training_data: h = n.activate(char_vectors, np.zeros(len(index_to_word))) total_err += mathutils.mean_squared_error(h, word_vector) print((total_err / len(training_data))) result = n.activate(to_char_vector_sequence("infer"), np.zeros(len(index_to_word))) self.assertEquals("infer", index_to_word[np.argmax(result)])
def test_learn_word_vectors_from_char_vector_sequence(self): text = "please learn how to infer word vectors from sequences of character vectors" index_to_word = list(set(text.split())) index_to_char = list(set(text)) word_to_index = {word: index for index, word in enumerate(index_to_word)} char_to_index = {word: index for index, word in enumerate(index_to_char)} def to_char_vector_sequence(word): sequence = [] for char in word: vector = np.ones(len(char_to_index)) * -1 vector[char_to_index[char]] = 1 sequence.append(vector) sequence.append(np.zeros(len(char_to_index))) return np.asarray(sequence) def to_word_vector(word): vector = np.ones(len(word_to_index)) * -1 vector[word_to_index[word]] = 1 return vector training_data = [(to_char_vector_sequence(word), to_word_vector(word)) for word in text.split()] n = NoOutputLstm(len(index_to_char), len(index_to_word)) for i in range(1000): for char_vectors, word_vector in training_data: intermediate_results = {} h_last = n.forward_prop(char_vectors, np.zeros(len(index_to_word)), intermediate_results) n.back_prop(ce_err_prime(h_last, word_vector), intermediate_results) n.train(0.1, intermediate_results) if i % 200 == 0: total_err = 0 for char_vectors, word_vector in training_data: h = n.activate(char_vectors, np.zeros(len(index_to_word))) total_err += mathutils.mean_squared_error(h, word_vector) print(total_err/len(training_data)) result = n.activate(to_char_vector_sequence("infer"), np.zeros(len(index_to_word))) self.assertEquals("infer", index_to_word[np.argmax(result)])