赞
踩
越往后,越看不懂,只能说是有了解到如何去训练模型代码,对于模型代码该如何去保存,如何通过网络模型去训练。只能一步步来,目前来说是推进度,等后面全部有了认知,再回来重新学习
模型训练一般分为四个步骤:
现在我们有了数据集和模型后,可以进行模型的训练与评估。
首先从数据集 Dataset加载代码,构建数据集。
import mindspore from mindspore import nn from mindspore.dataset import vision, transforms from mindspore.dataset import MnistDataset # Download data from open datasets from download import download url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \ "notebook/datasets/MNIST_Data.zip" path = download(url, "./", kind="zip", replace=True) def datapipe(path, batch_size): image_transforms = [ vision.Rescale(1.0 / 255.0, 0), # Rescale the image to [0, 1] vision.Normalize(mean=(0.1307,), std=(0.3081,)), # Normalize the image vision.HWC2CHW() # Convert image from HWC format to CHW format ] label_transform = transforms.TypeCast(mindspore.int32) # Cast label to int32 dataset = MnistDataset(path) # Load MNIST dataset dataset = dataset.map(image_transforms, 'image') # Apply image transformations dataset = dataset.map(label_transform, 'label') # Apply label transformation dataset = dataset.batch(batch_size) # Batch the dataset return dataset train_dataset = datapipe('MNIST_Data/train', batch_size=64) # Create training dataset test_dataset = datapipe('MNIST_Data/test', batch_size=64) # Create test dataset
mindspore
: MindSpore的主模块,用于深度学习模型的构建和训练。mindspore.nn
: 包含神经网络层和损失函数等。mindspore.dataset.vision
: 包含图像处理相关的数据增强和变换函数。mindspore.dataset.transforms
: 包含数据变换函数。mindspore.dataset.MnistDataset
: 用于加载MNIST数据集。download
: 用于从指定URL下载数据。url
: 存储MNIST数据集的URL。path = download(url, "./", kind="zip", replace=True)
: 下载并解压数据集到当前目录。datapipe
:
image_transforms
: 一系列图像变换操作,包括重缩放、标准化和格式转换。
vision.Rescale(1.0 / 255.0, 0)
: 将图像像素值从[0, 255]缩放到[0, 1]。vision.Normalize(mean=(0.1307,), std=(0.3081,))
: 对图像进行标准化处理。vision.HWC2CHW()
: 将图像从高度-宽度-通道(HWC)格式转换为通道-高度-宽度(CHW)格式。label_transform
: 将标签数据转换为int32
类型。dataset = MnistDataset(path)
: 加载MNIST数据集。dataset = dataset.map(image_transforms, 'image')
: 对图像应用上述变换。dataset = dataset.map(label_transform, 'label')
: 对标签应用类型转换。dataset = dataset.batch(batch_size)
: 将数据集分批处理。train_dataset = datapipe('MNIST_Data/train', batch_size=64)
: 创建训练数据集。test_dataset = datapipe('MNIST_Data/test', batch_size=64)
: 创建测试数据集。mindspore.dataset.vision.Rescale
: 用于图像像素值的缩放。mindspore.dataset.vision.Normalize
: 用于图像的标准化处理。mindspore.dataset.vision.HWC2CHW
: 用于图像格式的转换。mindspore.dataset.transforms.TypeCast
: 用于数据类型的转换。mindspore.dataset.MnistDataset
: 用于加载MNIST数据集。dataset.map
: 用于对数据集中的数据应用指定的变换。dataset.batch
: 用于将数据集分批处理。定义神经网络模型
从网络构建中加载代码,构建一个神经网络模型。
class Network(nn.Cell): def __init__(self): super().__init__() self.flatten = nn.Flatten() # Flatten the input tensor into a 2D matrix self.dense_relu_sequential = nn.SequentialCell( nn.Dense(28*28, 512), # Fully connected layer with input size 28*28 and output size 512 nn.ReLU(), # Apply ReLU activation function nn.Dense(512, 512), # Another fully connected layer with output size 512 nn.ReLU(), # Apply ReLU activation function nn.Dense(512, 10) # Fully connected layer with output size 10 for classification ) def construct(self, x): x = self.flatten(x) # Flatten the input logits = self.dense_relu_sequential(x) # Pass the input through the sequential dense layers with ReLU return logits # Return the output logits model = Network() # Instantiate the neural network model
Network
:
mindspore.nn.Cell
,这是MindSpore中神经网络模块的基类。__init__
方法定义了网络的层次结构:
self.flatten
: 一个 Flatten
层,将输入的多维张量展平为二维张量。self.dense_relu_sequential
: 一个 SequentialCell
容器,按顺序包含多个层:
nn.Dense(28*28, 512)
: 一个全连接层,将输入张量从28x28(MNIST图像尺寸)展平后变成512维向量。nn.ReLU()
: 一个ReLU激活函数,用于引入非线性。nn.Dense(512, 512)
: 另一个全连接层,输入输出尺寸都是512维。nn.ReLU()
: 再次使用ReLU激活函数。nn.Dense(512, 10)
: 最后的全连接层,输出10个类别的得分(用于分类任务)。construct
** 方法**:
x = self.flatten(x)
: 将输入张量展平。logits = self.dense_relu_sequential(x)
: 将展平后的张量通过定义好的全连接层序列。model = Network()
: 创建 Network
类的实例,也就是我们定义的神经网络模型。nn.Cell
: MindSpore中所有神经网络模块的基类。nn.Flatten
: 将输入张量展平成二维张量。nn.Dense
: 全连接层,参数包括输入和输出的维度。nn.ReLU
: ReLU激活函数,应用非线性变换。nn.SequentialCell
: 用于按顺序容纳和执行多个子层。超参(Hyperparameters)是可以调整的参数,可以控制模型训练优化的过程,不同的超参数值可能会影响模型训练和收敛速度。目前深度学习模型多采用批量随机梯度下降算法进行优化,随机梯度下降算法的原理如下:
公式中,n
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。