training an epoch.
(model, optimizer, train_data, sequence_length, clip_ratio)
| 192 | |
| 193 | |
| 194 | def train(model, optimizer, train_data, sequence_length, clip_ratio): |
| 195 | """training an epoch.""" |
| 196 | |
| 197 | def model_loss(inputs, targets): |
| 198 | return loss_fn(model, inputs, targets, training=True) |
| 199 | |
| 200 | grads = tfe.implicit_gradients(model_loss) |
| 201 | |
| 202 | total_time = 0 |
| 203 | for batch, i in enumerate(range(0, train_data.shape[0] - 1, sequence_length)): |
| 204 | train_seq, train_target = _get_batch(train_data, i, sequence_length) |
| 205 | start = time.time() |
| 206 | optimizer.apply_gradients( |
| 207 | clip_gradients(grads(train_seq, train_target), clip_ratio)) |
| 208 | total_time += (time.time() - start) |
| 209 | if batch % 10 == 0: |
| 210 | time_in_ms = (total_time * 1000) / (batch + 1) |
| 211 | sys.stderr.write("batch %d: training loss %.2f, avg step time %d ms\n" % |
| 212 | (batch, model_loss(train_seq, train_target).numpy(), |
| 213 | time_in_ms)) |
| 214 | |
| 215 | |
| 216 | class Datasets(object): |