| 34 | return super().fit(**dict((k, v) for k, v in locals().items() if k not in ('self', 'kwargs'))) |
| 35 | |
| 36 | def build_model(self, embedding, rnn_input_dropout, rnn_units, rnn_output_dropout, batch_size, seq_len, training, |
| 37 | **kwargs) -> tf.keras.Model: |
| 38 | model = tf.keras.Sequential() |
| 39 | extra_args = {} |
| 40 | if training: |
| 41 | extra_args['batch_input_shape'] = [batch_size, seq_len] |
| 42 | embedding = tf.keras.layers.Embedding(input_dim=len(self.transform.vocab), output_dim=embedding, |
| 43 | trainable=True, mask_zero=True, **extra_args) |
| 44 | model.add(embedding) |
| 45 | if rnn_input_dropout: |
| 46 | model.add(tf.keras.layers.Dropout(rnn_input_dropout, name='rnn_input_dropout')) |
| 47 | model.add(tf.keras.layers.LSTM(units=rnn_units, return_sequences=True, stateful=training, name='encoder')) |
| 48 | if rnn_output_dropout: |
| 49 | model.add(tf.keras.layers.Dropout(rnn_output_dropout, name='rnn_output_dropout')) |
| 50 | model.add(tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(len(self.transform.vocab)), name='decoder')) |
| 51 | return model |
| 52 | |
| 53 | # noinspection PyMethodOverriding |
| 54 | def build_optimizer(self, optimizer, learning_rate, clipnorm, **kwargs): |