昇思25天学习打卡营第1天|模型训练的基本步骤

  • 简单认识下mindspore框架
    • 什么是mindspore?
    • MindSpore是华为推出的一款开源深度学习框架,旨在简化深度学习模型的开发、训练和部署过程。这个全场景AI框架于2019年8月推出,随后于2020年3月28日正式开源。其目标是实现易开发、高效执行、全场景统一部署。MindSpore提供了一套端到端的开发工具和算法库,使用户能够更轻松地构建和部署深度学习模型。
    • 主流的学习框架有哪些,该框架和主流的有什么区别?
      • 有几个主流的深度学习框架,包括TensorFlow、PyTorch、Keras和MXNet。这些框架在深度学习领域被广泛应用,各有自己的特点和优势。
      • TensorFlow是由Google开发的开源深度学习框架,它具有强大的生态系统和广泛的支持。PyTorch是由Facebook开发的深度学习框架,被认为在动态计算图方面更灵活。Keras是一个高层神经网络API,可以在TensorFlow、Theano和CNTK上运行。MXNet是亚马逊支持的深度学习框架,具有高效的分布式训练能力。
      • MindSpore与这些主流框架的区别在于其全场景AI能力,以及提供的端到端解决方案。MindSpore专注于简化深度学习模型的开发和部署过程,旨在提供更高效的执行和统一的部署体验。同时,MindSpore还注重隐私保护和安全性,为用户提供全面的解决方案。
  • 简单总结:mindspore 是华为推出的深度学习框架,提供全场景AI能力,以及的端到端解决方案。具有易开发、高效执行、全场景统一的特点。
  • 模型训练的一般步骤和流程
    • 第一步:获取数据
      • 使用下载的数据集Mnist(包含大量手写数字的图像)
    • 第二步:数据预处理
      • 拆分训练集和测试集(不用此步骤,数据集做了)
      • 使用数据处理流水线(Data Processing Pipeline)使用map对图像数据及标签进行变换处理,然后将处理好的数据集打包为大小为64的batch。
    • 第三步: 网络构建
      • Flatten层用于将输入数据展平,SequentialCell层包含了三个全连接层,并且每个全连接层后面跟着一个ReLU激活函数。在construct方法中,对输入数据进行展平操作,然后通过定义好的全连接层和激活函数计算出模型的输出logits。
      • # Define model
        class Network(nn.Cell):
            def __init__(self):
                super().__init__()
                self.flatten = nn.Flatten()
                self.dense_relu_sequential = nn.SequentialCell(
                    nn.Dense(28*28, 512),
                    nn.ReLU(),
                    nn.Dense(512, 512),
                    nn.ReLU(),
                    nn.Dense(512, 10)
                )
        
            def construct(self, x):
                x = self.flatten(x)
                logits = self.dense_relu_sequential(x)
                return logits
        
        model = Network()
        print(model)
    • 第四步:模型训练
      • 在模型训练中,一个完整的训练过程(step)需要实现以下三步:
      • 正向计算:模型预测结果(logits),并与正确标签(label)求预测损失(loss)。
      • 反向传播:利用自动微分机制,自动求模型参数(parameters)对于loss的梯度(gradients)。
      • 参数优化:将梯度更新到参数上。
      • # 1. Define forward function
        def forward_fn(data, label):
            logits = model(data)
            loss = loss_fn(logits, label)
            return loss, logits
        
        # 2. Get gradient function
        grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True)
        
        # 3. Define function of one-step training
        def train_step(data, label):
            (loss, _), grads = grad_fn(data, label)
            optimizer(grads)
            return loss
        
        def train(model, dataset):
            size = dataset.get_dataset_size()
            model.set_train()
            for batch, (data, label) in enumerate(dataset.create_tuple_iterator()):
                loss = train_step(data, label)
        
                if batch % 100 == 0:
                    loss, current = loss.asnumpy(), batch
                    print(f"loss: {loss:>7f}  [{current:>3d}/{size:>3d}]")
      • 得到训练结果

        Accuracy: 94.0%, Avg loss: 0.206913

    • 第五步:预测和检验
      • 先保存训练好的模型
      • 加载模型
      • 使用测试集进行验证,并输出结果

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值