|
2 | 2 | import numpy as np |
3 | 3 |
|
4 | 4 | from keras.preprocessing.sequence import pad_sequences |
| 5 | +from keras.optimizers import RMSprop |
5 | 6 | from keras.layers import Input, LSTM, RepeatVector |
| 7 | +from keras.layers import Dropout |
6 | 8 | from keras.models import Model |
7 | 9 |
|
8 | 10 | from yoctol_utils.hash import consistent_hash |
|
14 | 16 | def _create_single_layer_seq2seq_model(max_length, max_index, latent_size): |
15 | 17 | inputs = Input(shape=(max_length, max_index)) |
16 | 18 | encoded = LSTM(latent_size)(inputs) |
17 | | - decoded = RepeatVector(max_length)(encoded) |
| 19 | + decoded = Dropout(0.3)(encoded) |
| 20 | + decoded = RepeatVector(max_length)(decoded) |
18 | 21 | decoded = LSTM(max_index, return_sequences=True)(decoded) |
19 | 22 | model = Model(inputs, decoded) |
20 | 23 | encoder = Model(inputs, encoded) |
21 | 24 |
|
22 | | - model.compile(loss='categorical_crossentropy', optimizer='Adam') |
| 25 | + optimizer = RMSprop( |
| 26 | + lr=0.0001, |
| 27 | + rho=0.95, |
| 28 | + decay=0.1, |
| 29 | + ) |
| 30 | + model.compile(loss='categorical_crossentropy', optimizer=optimizer) |
23 | 31 | return model, encoder |
24 | 32 |
|
25 | 33 |
|
@@ -80,9 +88,14 @@ def _generate_padding_array(self, seqs): |
80 | 88 | array.append(np_seq) |
81 | 89 | return np.array(array) |
82 | 90 |
|
83 | | - def fit(self, train_seqs): |
| 91 | + def fit(self, train_seqs, verbose=2, nb_epoch=10, validation_split=0.0): |
84 | 92 | train_x = self._generate_padding_array(train_seqs) |
85 | | - self.model.fit(train_x, train_x, nb_epoch=10) |
| 93 | + self.model.fit( |
| 94 | + train_x, train_x, |
| 95 | + verbose=verbose, |
| 96 | + nb_epoch=nb_epoch, |
| 97 | + validation_split=validation_split, |
| 98 | + ) |
86 | 99 |
|
87 | 100 | def transform(self, seqs): |
88 | 101 | test_x = self._generate_padding_array(seqs) |
|
0 commit comments