train_loss = 0 train_acc = 0 eval_acc = 0 for data, label in train_data: data = data.as_in_context(mx_ctx) label = label.as_in_context(mx_ctx) with autograd.record(): output = net(data) loss = loss_fn(output, label) loss.backward() trainer.step(batch_size=BATCH_SIZE) train_loss += loss.mean().asscalar() train_acc += acc(output, label) for data, label in eval_data: data = data.as_in_context(mx_ctx) label = label.as_in_context(mx_ctx) eval_acc += acc(net(data), label) print("epoch {}, loss {:0.3f}, acc {:0.3f}, val_acc {:0.3f}".format( epoch, train_loss / len(train_data), train_acc / len(train_data), eval_acc / len(eval_data))) print("Elapsed time {:02f} seconds".format(time.time() - t0)) # %% # -- Save parameters net.save_parameters('fashion_mnist_gluon.params')
train_loss /= len(train_data) eval_loss /= len(eval_data) _, train_acc = train_metric.get() _, eval_acc = eval_metric.get() img_per_sec = len(mnist_train) / chrono_epoch print( f"{len(mnist_train)}, epoch {epoch}, train_loss {train_loss:0.3f}, acc {train_acc:0.3f}, val_loss: {eval_loss:0.3f}, val_acc {eval_acc:0.3f}, lr: {trainer.learning_rate}, img/sec: {img_per_sec:0.2f}, chrono: {chrono_epoch:0.2f}" ) # Add some values to mxboard sw.add_scalar("Accuracy", ("train_acc", train_acc), global_step=epoch) sw.add_scalar("Accuracy", ("val_acc", eval_acc), global_step=epoch) for key, param in net.collect_params(".*weight").items(): sw.add_histogram(f"grad_{param.name}", param.grad(ctx=mx_ctx[0]), global_step=epoch) # Save parameters if they are better than the previous epoch if eval_acc > prev_val_acc: net.save_parameters(f"{param_file_prefix}-{epoch:04d}.params") prev_val_acc = eval_acc print("=== Total training time: {:02f} seconds".format(time.time() - t0)) # %% # -- Save parameters net.save_parameters(f"{param_file_prefix}-final.params")