s += 1 loss, xent = step(x, y) if tf.equal(s % 10, 0): e = ps.metric.result() tf.print('Step:', s, ', loss:', loss, ', xent:', e) return loss, xent for e in range(ps.num_epochs): loss, xent = epoch() print(f'Epoch {e} loss:', loss.numpy(), ', xent:', xent.numpy()) params = dict( dim_batch=2, dim_dense=150, dim_hidden=15, dim_vocab=len(qd.vocab), len_max_input=20, loss=ks.losses.SparseCategoricalCrossentropy(from_logits=True), metric=ks.metrics.SparseCategoricalCrossentropy(from_logits=True), num_epochs=10, num_shards=2, optimizer=ks.optimizers.Adam(), ) if __name__ == '__main__': ps = qd.Params(**params) # import advanced_tf.masking as qm # qm.main_graph(ps, dset_for(ps), model_for(ps)) main_eager(ps, dset_for(ps), model_for(ps))
def main_graph(ps, ds, m): b = pth.Path('/tmp/q') b.mkdir(parents=True, exist_ok=True) lp = datetime.now().strftime('%Y%m%d-%H%M%S') lp = b / f'logs/{lp}' c = tf.train.Checkpoint(model=m) mp = b / 'model' / f'{m.name}' mgr = tf.train.CheckpointManager(c, str(mp), max_to_keep=3) # if mgr.latest_checkpoint: # vs = tf.train.list_variables(mgr.latest_checkpoint) # print(f'\n*** checkpoint vars: {vs}') c.restore(mgr.latest_checkpoint).expect_partial() class CheckpointCB(ks.callbacks.Callback): def on_epoch_end(self, epoch, logs=None): mgr.save() cbs = [ CheckpointCB(), ks.callbacks.TensorBoard( log_dir=str(lp), histogram_freq=1, ), ] m.fit(ds, callbacks=cbs, epochs=ps.num_epochs) if __name__ == '__main__': ps = qd.Params(**qc.params) main_graph(ps, qc.dset_for(ps), model_for(ps))