Ejemplo n.º 1
0
            # 把训练数据转换为动态图所需的Variable类型
            img = fluid.dygraph.base.to_variable(dy_x_data)
            label = fluid.dygraph.base.to_variable(y_data)
            # 不需要训练label
            label.stop_gradient = True
            # 获取网络输出
            predict = cnn(img)
            # 获取准确率函数和损失函数
            accuracy = fluid.layers.accuracy(input=predict, label=label)
            loss = fluid.layers.cross_entropy(predict, label)
            avg_loss = fluid.layers.mean(loss)
            # 计算梯度
            avg_loss.backward()
            momentum.minimize(avg_loss)
            # 将参数梯度清零以保证下一轮训练的正确性
            cnn.clear_gradients()
            # 打印一次信息
            if batch_id % 100 == 0:
                print(
                    "Epoch:%d, Batch:%d, Loss:%f, Accuracy:%f" % (epoch, batch_id, avg_loss.numpy(), accuracy.numpy()))
        # 开始执行测试
        cnn.eval()
        test_cost, test_acc = test_train(test_reader, cnn, BATCH_SIZE)
        # 准备重新恢复训练
        cnn.train()
        print("Test:%d, Loss:%f, Accuracy:%f" % (epoch, test_cost, test_acc))

        if not os.path.exists('models'):
            os.makedirs('models')
        # 保存模型
        fluid.dygraph.save_dygraph(state_dict=cnn.state_dict(), model_path="models/cnn")