网站建设 电话咨询,满vip手游的平台,百度网站怎么做的赚钱吗,医药网站建设需要注意点早闻毕晟、昇思等平台#xff0c;今日有机会能参加入门课程#xff0c;非视频课程算是我第一次看#xff0c;也算是对我自己的一个锻炼#xff0c;之前也没有系统学习模型之类#xff0c;每天抽出一点点时间来学习一下也是不错的 MindSpore
看来是和torch类似的结构
处理… 早闻毕晟、昇思等平台今日有机会能参加入门课程非视频课程算是我第一次看也算是对我自己的一个锻炼之前也没有系统学习模型之类每天抽出一点点时间来学习一下也是不错的 MindSpore
看来是和torch类似的结构
处理数据集
from download import downloadurl https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/ \notebook/datasets/MNIST_Data.zip
path download(url, ./, kindzip, replaceTrue)很方便的就下载了MNIST数据集
train_dataset MnistDataset(MNIST_Data/train)
test_dataset MnistDataset(MNIST_Data/test)读取训练集和测试集查看数据names print(train_dataset.get_col_names())
MindSpore的dataset使用数据处理流水线Data Processing Pipeline需指定map、batch、shuffle等操作。这里我们使用map对图像数据及标签进行变换处理然后将处理好的数据集打包为大小为64的batch。
def datapipe(dataset, batch_size):image_transforms [vision.Rescale(1.0 / 255.0, 0),vision.Normalize(mean(0.1307,), std(0.3081,)),vision.HWC2CHW()]label_transform transforms.TypeCast(mindspore.int32)dataset dataset.map(image_transforms, image)dataset dataset.map(label_transform, label)dataset dataset.batch(batch_size)return dataset
# Map vision transforms and batch dataset
train_dataset datapipe(train_dataset, 64)
test_dataset datapipe(test_dataset, 64)网络构建
mindspore.nn类是构建所有网络的基类也是网络的基本单元。当用户需要自定义网络时可以继承nn.Cell类并重写__init__方法和construct方法。__init__包含所有网络层的定义construct中包含数据Tensor的变换过程。
# 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 logitsmodel Network()
print(model)模型训练
正向计算模型预测结果logits并与正确标签label求预测损失loss。反向传播利用自动微分机制自动求模型参数parameters对于loss的梯度gradients。参数优化将梯度更新到参数上。
MindSpore使用函数式自动微分机制因此针对上述步骤需要实现 4. 定义正向计算函数。 5. 使用value_and_grad通过函数变换获得梯度计算函数。 6. 定义训练函数使用set_train设置为训练模式执行正向计算、反向传播和参数优化。
# Instantiate loss function and optimizer
loss_fn nn.CrossEntropyLoss()
optimizer nn.SGD(model.trainable_params(), 1e-2)# 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_auxTrue)# 3. Define function of one-step training
def train_step(data, label):(loss, _), grads grad_fn(data, label)optimizer(grads)return lossdef 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(), batchprint(floss: {loss:7f} [{current:3d}/{size:3d}])def test(model, dataset, loss_fn):num_batches dataset.get_dataset_size()model.set_train(False)total, test_loss, correct 0, 0, 0for data, label in dataset.create_tuple_iterator():pred model(data)total len(data)test_loss loss_fn(pred, label).asnumpy()correct (pred.argmax(1) label).asnumpy().sum()test_loss / num_batchescorrect / totalprint(fTest: \n Accuracy: {(100*correct):0.1f}%, Avg loss: {test_loss:8f} \n)epochs 3
for t in range(epochs):print(fEpoch {t1}\n-------------------------------)train(model, train_dataset)test(model, test_dataset, loss_fn)
print(Done!)保存模型
# Save checkpoint
mindspore.save_checkpoint(model, model.ckpt)
print(Saved Model to model.ckpt)加载模型
加载保存的权重分为两步
重新实例化模型对象构造模型。加载模型参数并将其加载至模型上。
# Instantiate a random initialized model
model Network()
# Load checkpoint and load parameter to model
param_dict mindspore.load_checkpoint(model.ckpt)
param_not_load, _ mindspore.load_param_into_net(model, param_dict)
print(param_not_load)直接推理
model.set_train(False)
for data, label in test_dataset:pred model(data)predicted pred.argmax(1)print(fPredicted: {predicted[:10]}, Actual: {label[:10]})break