当前位置: 首页 > news >正文

《昇思25天学习打卡营第05天|qingyun201003》

日期

image.png

心得

通过本节课的学习,学习到了通过网络获取数据集,处理数据集模型。数据模型层数据变换,模型参数解析和其对应代码中的API进行解析。

昇思MindSpore 基础入门学习 网络构建 (AI 代码解析)

网络构建

神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类,也是网络的基本单元。一个神经网络模型表示为一个Cell,它由不同的子Cell构成。使用这样的嵌套结构,可以简单地使用面向对象编程的思维,对神经网络结构进行构建和管理。
下面我们将构建一个用于Mnist数据集分类的神经网络模型。

import mindspore  # 导入MindSpore库,这是一个深度学习框架,类似于TensorFlow和PyTorch。
from mindspore import nn, ops  # 从MindSpore库中导入神经网络模块(nn)和操作模块(ops)。
  1. import mindspore:
    • 这一行代码导入了MindSpore库,MindSpore是一个开源的深度学习框架,由华为开发,旨在提供高效、灵活的AI计算框架。
  2. from mindspore import nn, ops:
    • 这一行代码从MindSpore库中导入了两个重要的模块:
      • nn: 神经网络模块,包含了构建神经网络所需的各种层和函数,如卷积层、全连接层、激活函数等。
      • ops: 操作模块,提供了各种数学运算和操作,如矩阵运算、张量操作等。
  • mindspore:
    • MindSpore库的主要入口,提供了框架的基础功能和配置。
  • mindspore.nn:
    • 神经网络模块,包含了一系列用于构建神经网络的类和函数,例如:
      • nn.Conv2d: 二维卷积层。
      • nn.Linear: 全连接层。
      • nn.ReLU: ReLU激活函数。
      • nn.Sequential: 顺序容器,用于按顺序组合多个层。
  • mindspore.ops:
    • 操作模块,提供了各种数学运算和操作,例如:
      • ops.Add: 加法操作。
      • ops.MatMul: 矩阵乘法操作。
      • ops.ReduceSum: 求和操作。
      • ops.Softmax: Softmax操作,用于多分类问题的输出层。

这些模块和类是构建和训练深度学习模型的基础组件,通过组合和配置这些组件,可以实现复杂的神经网络结构和算法。

定义模型类

当我们定义神经网络时,可以继承nn.Cell类,在__init__方法中进行子Cell的实例化和状态管理,在construct方法中实现Tensor操作。
construct意为神经网络(计算图)构建,相关内容详见使用静态图加速。

class Network(nn.Cell):def __init__(self):super().__init__()self.flatten = nn.Flatten()self.dense_relu_sequential = nn.SequentialCell(nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 10, weight_init="normal", bias_init="zeros"))def construct(self, x):x = self.flatten(x)logits = self.dense_relu_sequential(x)return logitsmodel = Network()
print(model)
  1. class Network(nn.Cell)::
    • 定义了一个名为 Network 的类,继承自 nn.Cell。在 MindSpore 中,nn.Cell 是构建神经网络的基本单元。
  2. def __init__(self)::
    • 初始化方法,定义了网络的结构。
    • super().__init__():调用父类 nn.Cell 的初始化方法。
    • self.flatten = nn.Flatten():创建一个 nn.Flatten 层,用于将输入展平为一维向量。
    • self.dense_relu_sequential = nn.SequentialCell(...):创建一个顺序容器 nn.SequentialCell,包含多个层:
      • nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"):输入层,输入大小为 28*28(即 784),输出大小为 512,权重初始化为正态分布,偏置初始化为零。
      • nn.ReLU():ReLU 激活函数。
      • nn.Dense(512, 512, weight_init="normal", bias_init="zeros"):隐藏层,输入和输出大小均为 512。
      • nn.ReLU():ReLU 激活函数。
      • nn.Dense(512, 10, weight_init="normal", bias_init="zeros"):输出层,输入大小为 512,输出大小为 10(假设是 10 类分类问题)。
  3. def construct(self, x)::
    • 定义了网络的前向传播过程。
    • x = self.flatten(x):将输入 x 展平为一维向量。
    • logits = self.dense_relu_sequential(x):将展平后的输入通过顺序容器中的各层,得到最终的输出 logits
    • return logits:返回最终的输出。
  4. model = Network():
    • 创建 Network 类的一个实例 model
  5. print(model):
    • 打印 model 的结构,显示网络的层和参数信息。
  • nn.Cell:
    • MindSpore 中用于构建神经网络的基本单元。
  • nn.Flatten:
    • 将输入展平为一维向量的层。
  • nn.SequentialCell:
    • 顺序容器,按顺序组合多个层。
  • nn.Dense:
    • 全连接层,参数包括输入大小、输出大小、权重初始化和偏置初始化。
  • nn.ReLU:
    • ReLU 激活函数,用于引入非线性。

通过这些组件,可以构建一个简单的多层感知机(MLP)网络,用于处理类似 MNIST 数据集的图像分类任务。

X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
# print logits
logitspred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")
  1. X = ops.ones((1, 28, 28), mindspore.float32):
    • 创建一个形状为 (1, 28, 28) 的张量 X,其中所有元素值为 1,数据类型为 mindspore.float32。这个张量模拟了一个 28x28 的单通道图像输入。
  2. logits = model(X):
    • 将输入张量 X 传递给模型 model,得到模型的输出 logitslogits 是未经 softmax 处理的原始输出,通常用于分类任务。
  3. pred_probab = nn.Softmax(axis=1)(logits):
    • logits 应用 softmax 函数,将其转换为概率分布。nn.Softmax(axis=1) 表示在第二个维度(即类别维度)上进行 softmax 操作。
  4. y_pred = pred_probab.argmax(1):
    • 在概率分布 pred_probab 上找到最大概率对应的索引,即预测的类别。argmax(1) 表示在第二个维度上找到最大值的索引。
  5. print(f"Predicted class: {y_pred}"):
    • 打印预测的类别。y_pred 是一个包含预测类别索引的张量。
  • ops.ones:
    • 创建一个全为 1 的张量,参数包括形状和数据类型。
  • nn.Softmax:
    • softmax 函数,用于将输入转换为概率分布,参数 axis 指定在哪个维度上进行 softmax 操作。
  • argmax:
    • 找到张量中指定维度上的最大值对应的索引。

通过这些操作,可以对模型的输出进行后处理,得到最终的预测类别。

模型层

本节中我们分解上节构造的神经网络模型中的每一层。首先我们构造一个shape为(3, 28, 28)的随机数据(3个28x28的图像),依次通过每一个神经网络层来观察其效果。

input_image = ops.ones((3, 28, 28), mindspore.float32)
print(input_image.shape)
  1. input_image = ops.ones((3, 28, 28), mindspore.float32):
    • 创建一个形状为 (3, 28, 28) 的张量 input_image,其中所有元素值为 1,数据类型为 mindspore.float32。这个张量模拟了一个 28x28 的三通道图像输入(例如 RGB 图像)。
  2. print(input_image.shape):
    • 打印 input_image 的形状。shape 属性返回张量的维度信息。
  • ops.ones:
    • 创建一个全为 1 的张量,参数包括形状和数据类型。
  • shape:
    • 张量的属性,返回张量的维度信息。

通过这些操作,可以创建并查看一个模拟的三通道图像输入张量的形状。

nn.Flatten

实例化nn.Flatten层,将28x28的2D张量转换为784大小的连续数组。

flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.shape)
  1. flatten = nn.Flatten():
    • 创建一个 nn.Flatten 层,用于将输入张量展平为一维向量。
  2. flat_image = flatten(input_image):
    • input_image 传递给 flatten 层,得到展平后的张量 flat_image
  3. print(flat_image.shape):
    • 打印 flat_image 的形状。shape 属性返回张量的维度信息。
  • nn.Flatten:
    • 用于将输入张量展平为一维向量的层。
  • shape:
    • 张量的属性,返回张量的维度信息。

通过这些操作,可以将一个形状为 (3, 28, 28) 的三通道图像输入张量展平为一维向量,并查看其形状。展平后的形状为 (3 * 28 * 28,),即 (2352,)

nn.Dense

nn.Dense为全连接层,其使用权重和偏差对输入进行线性变换。

layer1 = nn.Dense(in_channels=28*28, out_channels=20)
hidden1 = layer1(flat_image)
print(hidden1.shape)

  1. layer1 = nn.Dense(in_channels=28*28, out_channels=20):
    • 创建一个全连接层 layer1,输入通道数为 28*28(即 784),输出通道数为 20。这个层将输入的展平图像转换为一个 20 维的向量。
  2. hidden1 = layer1(flat_image):
    • 将展平后的图像 flat_image 传递给全连接层 layer1,得到输出 hidden1hidden1 是经过全连接层处理后的张量。
  3. print(hidden1.shape):
    • 打印 hidden1 的形状。shape 属性返回张量的维度信息。

  • nn.Dense:
    • 全连接层(也称为线性层),用于将输入张量通过线性变换转换为输出张量。参数 in_channels 指定输入的特征数,out_channels 指定输出的特征数。
  • shape:
    • 张量的属性,返回张量的维度信息。

通过这些操作,可以将展平后的图像输入传递给一个全连接层,并查看其输出的形状。假设 flat_image 的形状为 (batch_size, 28*28),那么 hidden1 的形状将为 (batch_size, 20)

nn.ReLU

nn.ReLU层给网络中加入非线性的激活函数,帮助神经网络学习各种复杂的特征。

print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")
  1. print(f"Before ReLU: {hidden1}\n\n"):
    • 打印 hidden1 的值,即全连接层的输出,在应用 ReLU 激活函数之前。
  2. hidden1 = nn.ReLU()(hidden1):
    • hidden1 应用 ReLU 激活函数。nn.ReLU() 创建一个 ReLU 激活函数层,并将其应用于 hidden1。ReLU 函数将所有负值置为 0,保持正值不变。
  3. print(f"After ReLU: {hidden1}"):
    • 打印 hidden1 的值,即应用 ReLU 激活函数之后的输出。
  • nn.ReLU:
    • ReLU(Rectified Linear Unit)激活函数层,用于将输入张量中的所有负值置为 0,保持正值不变。

通过这些操作,可以观察全连接层输出在应用 ReLU 激活函数前后的变化。ReLU 激活函数有助于引入非线性,使得神经网络能够学习更复杂的函数。

nn.SequentialCell

nn.SequentialCell是一个有序的Cell容器。输入Tensor将按照定义的顺序通过所有Cell。我们可以使用nn.SequentialCell来快速组合构造一个神经网络模型。

seq_modules = nn.SequentialCell(flatten,layer1,nn.ReLU(),nn.Dense(20, 10)
)logits = seq_modules(input_image)
print(logits.shape)
  1. seq_modules = nn.SequentialCell(flatten, layer1, nn.ReLU(), nn.Dense(20, 10)):
    • 创建一个顺序模型 seq_modules,包含以下层:
      • flatten:展平层,将输入图像展平为一维向量。
      • layer1:全连接层,将展平后的图像转换为 20 维向量。
      • nn.ReLU():ReLU 激活函数层,对全连接层的输出应用 ReLU 激活函数。
      • nn.Dense(20, 10):另一个全连接层,将 20 维向量转换为 10 维向量。
  2. logits = seq_modules(input_image):
    • 将输入图像 input_image 传递给顺序模型 seq_modules,得到输出 logitslogits 是经过所有层处理后的最终输出。
  3. print(logits.shape):
    • 打印 logits 的形状。shape 属性返回张量的维度信息。
  • nn.SequentialCell:
    • 顺序模型容器,用于按顺序组合多个层。输入数据将按顺序通过这些层。
  • nn.Dense:
    • 全连接层(也称为线性层),用于将输入张量通过线性变换转换为输出张量。参数 in_channels 指定输入的特征数,out_channels 指定输出的特征数。
  • nn.ReLU:
    • ReLU(Rectified Linear Unit)激活函数层,用于将输入张量中的所有负值置为 0,保持正值不变。

通过这些操作,可以将输入图像传递给一个包含多个层的顺序模型,并查看其最终输出的形状。假设 input_image 的形状为 (batch_size, 1, 28, 28),那么 logits 的形状将为 (batch_size, 10)

nn.Softmax

最后使用nn.Softmax将神经网络最后一个全连接层返回的logits的值缩放为[0, 1],表示每个类别的预测概率。axis指定的维度数值和为1。

softmax = nn.Softmax(axis=1)
pred_probab = softmax(logits)
  1. softmax = nn.Softmax(axis=1):
    • 创建一个 Softmax 层 softmax,指定在第 1 维度(即每个样本的类别维度)上应用 Softmax 函数。Softmax 函数将输入张量的每个元素转换为概率值,且这些概率值的总和为 1。
  2. pred_probab = softmax(logits):
    • logits 传递给 Softmax 层 softmax,得到输出 pred_probabpred_probab 是经过 Softmax 函数处理后的概率分布。
  • nn.Softmax:
    • Softmax 激活函数层,用于将输入张量转换为概率分布。参数 axis 指定在张量的哪个维度上应用 Softmax 函数。通常在分类任务中,Softmax 函数用于将网络的输出转换为类别概率。

通过这些操作,可以将网络的输出 logits 转换为概率分布 pred_probab。假设 logits 的形状为 (batch_size, 10),那么 pred_probab 的形状也将为 (batch_size, 10),且每个样本的 10 个类别概率之和为 1。

模型参数

网络内部神经网络层具有权重参数和偏置参数(如nn.Dense),这些参数会在训练过程中不断进行优化,可通过 model.parameters_and_names() 来获取参数名及对应的参数详情。

print(f"Model structure: {model}\n\n")for name, param in model.parameters_and_names():print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n")

解析

  1. print(f"Model structure: {model}\n\n"):
    • 打印模型的结构信息。model 是一个神经网络模型对象,打印它会显示模型的层和结构。
  2. for name, param in model.parameters_and_names()::
    • 遍历 model.parameters_and_names() 返回的迭代器,获取每个参数的名称 name 和参数张量 param
  3. print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n"):
    • 打印每个参数的名称、形状和前两个值。param.shape 返回参数张量的维度信息,param[:2] 返回参数张量的前两个值。

API解析

  • model.parameters_and_names():
    • 获取模型中所有参数及其名称的方法。返回一个迭代器,包含参数名称和对应的参数张量。

通过这些操作,可以查看模型的结构以及每个层的参数名称、形状和前两个值。这对于调试和理解模型参数非常有用。例如,对于一个全连接层 nn.Dense(20, 10),其权重参数的形状可能是 (20, 10),偏置参数的形状可能是 (10,),并且可以查看这些参数的前两个值。

整体代码

#!/usr/bin/env python
# coding: utf-8# [![下载Notebook](https://qingyun-test.oss-cn-hangzhou.aliyuncs.com/images/2024/07/14/image9817421053129015551.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r2.3/tutorials/zh_cn/beginner/mindspore_model.ipynb) [![下载样例代码](https://qingyun-test.oss-cn-hangzhou.aliyuncs.com/images/2024/07/14/image11826012109507579499.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r2.3/tutorials/zh_cn/beginner/mindspore_model.py) [![查看源文件](https://qingyun-test.oss-cn-hangzhou.aliyuncs.com/images/2024/07/14/image12685397076148884701.png)](https://gitee.com/mindspore/docs/blob/r2.3/tutorials/source_zh_cn/beginner/model.ipynb)
# 
# [基本介绍](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/introduction.html) || [快速入门](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/quick_start.html) || [张量 Tensor](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/tensor.html) || [数据集 Dataset](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/dataset.html) || [数据变换 Transforms](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/transforms.html) || **网络构建** || [函数式自动微分](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/autograd.html) || [模型训练](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/train.html) || [保存与加载](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/save_load.html) || [使用静态图加速](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/accelerate_with_static_graph.html)# # 网络构建# 神经网络模型是由神经网络层和Tensor操作构成的,[mindspore.nn](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/mindspore.nn.html)提供了常见神经网络层的实现,在MindSpore中,[Cell](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/nn/mindspore.nn.Cell.html)类是构建所有网络的基类,也是网络的基本单元。一个神经网络模型表示为一个`Cell`,它由不同的子`Cell`构成。使用这样的嵌套结构,可以简单地使用面向对象编程的思维,对神经网络结构进行构建和管理。
# 
# 下面我们将构建一个用于Mnist数据集分类的神经网络模型。# In[1]:import mindspore
from mindspore import nn, ops# ## 定义模型类
# 
# 当我们定义神经网络时,可以继承`nn.Cell`类,在`__init__`方法中进行子Cell的实例化和状态管理,在`construct`方法中实现Tensor操作。
# 
# > `construct`意为神经网络(计算图)构建,相关内容详见[使用静态图加速](https://www.mindspore.cn/tutorials/zh-CN/r2.3/beginner/accelerate_with_static_graph.html)。# In[2]:class Network(nn.Cell):def __init__(self):super().__init__()self.flatten = nn.Flatten()self.dense_relu_sequential = nn.SequentialCell(nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 10, weight_init="normal", bias_init="zeros"))def construct(self, x):x = self.flatten(x)logits = self.dense_relu_sequential(x)return logits# 构建完成后,实例化`Network`对象,并查看其结构。# In[3]:model = Network()
print(model)# 我们构造一个输入数据,直接调用模型,可以获得一个二维的Tensor输出,其包含每个类别的原始预测值。
# 
# > `model.construct()`方法不可直接调用。# In[4]:X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
# print logits
logits# 在此基础上,我们通过一个`nn.Softmax`层实例来获得预测概率。# In[5]:pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")# ## 模型层
# 
# 本节中我们分解上节构造的神经网络模型中的每一层。首先我们构造一个shape为(3, 28, 28)的随机数据(3个28x28的图像),依次通过每一个神经网络层来观察其效果。# In[6]:input_image = ops.ones((3, 28, 28), mindspore.float32)
print(input_image.shape)# ### nn.Flatten
# 
# 实例化[nn.Flatten](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/nn/mindspore.nn.Flatten.html)层,将28x28的2D张量转换为784大小的连续数组。# In[7]:flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.shape)# ### nn.Dense
# 
# [nn.Dense](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/nn/mindspore.nn.Dense.html)为全连接层,其使用权重和偏差对输入进行线性变换。# In[8]:layer1 = nn.Dense(in_channels=28*28, out_channels=20)
hidden1 = layer1(flat_image)
print(hidden1.shape)# ### nn.ReLU
# 
# [nn.ReLU](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/nn/mindspore.nn.ReLU.html)层给网络中加入非线性的激活函数,帮助神经网络学习各种复杂的特征。# In[9]:print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")# ### nn.SequentialCell
# 
# [nn.SequentialCell](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/nn/mindspore.nn.SequentialCell.html)是一个有序的Cell容器。输入Tensor将按照定义的顺序通过所有Cell。我们可以使用`nn.SequentialCell`来快速组合构造一个神经网络模型。# In[10]:seq_modules = nn.SequentialCell(flatten,layer1,nn.ReLU(),nn.Dense(20, 10)
)logits = seq_modules(input_image)
print(logits.shape)# ### nn.Softmax
# 
# 最后使用[nn.Softmax](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/nn/mindspore.nn.Softmax.html)将神经网络最后一个全连接层返回的logits的值缩放为\[0, 1\],表示每个类别的预测概率。`axis`指定的维度数值和为1。# In[11]:softmax = nn.Softmax(axis=1)
pred_probab = softmax(logits)# ## 模型参数
# 
# 网络内部神经网络层具有权重参数和偏置参数(如`nn.Dense`),这些参数会在训练过程中不断进行优化,可通过 `model.parameters_and_names()` 来获取参数名及对应的参数详情。# In[12]:print(f"Model structure: {model}\n\n")for name, param in model.parameters_and_names():print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n")# 更多内置神经网络层详见[mindspore.nn API](https://www.mindspore.cn/docs/zh-CN/r2.3/api_python/mindspore.nn.html)。

解析

  1. 导入必要的库
import mindspore
from mindspore import nn, ops
  • mindspore:MindSpore的主库。
  • nn:包含神经网络层和模块。
  • ops:包含各种Tensor操作。
  1. 定义模型类
class Network(nn.Cell):def __init__(self):super().__init__()self.flatten = nn.Flatten()self.dense_relu_sequential = nn.SequentialCell(nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 10, weight_init="normal", bias_init="zeros"))def construct(self, x):x = self.flatten(x)logits = self.dense_relu_sequential(x)return logits
  • Network类继承自nn.Cell
  • __init__方法中定义了网络的层结构。
  • construct方法中定义了前向传播的逻辑。
  1. 实例化模型并查看结构
model = Network()
print(model)
  1. 测试模型
X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
logits
  1. 使用Softmax层获取预测概率
pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")
  1. 分解模型层
    • Flatten层
flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.shape)
  • Dense层
layer1 = nn.Dense(in_channels=28*28, out_channels=20)
hidden1 = layer1(flat_image)
print(hidden1.shape)
  • ReLU层
print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")
  • SequentialCell
seq_modules = nn.SequentialCell(flatten,layer1,nn.ReLU(),nn.Dense(20, 10)
)
logits = seq_modules(input_image)
print(logits.shape)
  • Softmax层
softmax = nn.Softmax(axis=1)
pred_probab = softmax(logits)
  1. 查看模型参数
print(f"Model structure: {model}\n\n")
for name, param in model.parameters_and_names():print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n")

API解析

  • nn.Cell:MindSpore中所有网络的基类。
  • nn.Flatten:将输入的2D张量展平为一维数组。
  • nn.Dense:全连接层,进行线性变换。
  • nn.ReLU:ReLU激活函数。
  • nn.SequentialCell:有序的Cell容器,按顺序执行各个Cell。
  • nn.Softmax:Softmax激活函数,将logits转换为概率分布。
  • model.parameters_and_names():获取模型参数及其名称。

通过这些步骤和API的使用,可以构建和管理神经网络模型,并进行前向传播和参数管理。

相关文章:

《昇思25天学习打卡营第05天|qingyun201003》

日期 心得 通过本节课的学习,学习到了通过网络获取数据集,处理数据集模型。数据模型层数据变换,模型参数解析和其对应代码中的API进行解析。 昇思MindSpore 基础入门学习 网络构建 (AI 代码解析) 网络构建 神经网络模型是由神经网络层和T…...

【Leetcode】二十一、前缀树 + 词典中最长的单词

文章目录 1、背景2、前缀树Trie3、leetcode208:实现Trie4、leetcode720:词典中最长的单词 1、背景 如上,以浏览器搜索时的自动匹配为例: 如果把所有搜索关键字放一个数组里,则:插入、搜索一个词条时&#x…...

秋招Java后端开发冲刺——Mybatis使用总结

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目,它封装了 JDBC,使开发者只需要关注 SQL 语句本身,而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO(Plain …...

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高,文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件,使其既能保持清晰,又能轻松分享?今天,给大家分享五种实用的视频压缩方法,快来…...

【Oracle】Oracle语法之递归查询

目录 递归查询使用场景备注 语法相关属性解释 案例基本使用升级版-带上递归查询的属性 总结: 递归查询 Oracle的递归查询是指在一个查询语句中使用自引用的方式进行循环迭代查询。它可以用于处理具有层次结构的数据,如组织架构、产品类别等。递归查询通…...

【教程】Vue2中使用svg矢量图

1.npm导包 npm i svg-sprite-loader --save2.创建目录放入svg文件,创建SvgIcon.js 3.SvgIcon.js const req require.context(./svg, false, /\.svg$/) const requireAll requireContext > requireContext.keys().map(requireContext) requireAll(req)4.vue.c…...

简约唯美的404HTML源码

源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…...

PDF 转图片并插入到 EXCEL 再转PDF

pom.xml 引用 <dependency><groupId>com.aspose</groupId><artifactId>aspose-cells</artifactId><version>21.11</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>as…...

jmeter之变量随机参数化以及解决多线程不会随机变化

参考链接&#xff1a; https://www.cnblogs.com/Testing1105/p/12743475.html jmeter 使用random函数多线程运行时数据不会随机变化&#xff1f;_jmeter 线程组循环执行时 变量不变-CSDN博客 1、如下图所示&#xff0c;需要对请求参数 autor 和phone进行随机参数化 2、目前有…...

24/7/12总结

axios Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 get请求: <script>function…...

sentinel网关限流配置及使用

sentinel控制台源码&#xff1a;https://download.csdn.net/download/yixin605691235/89543923 sentinel控制台jar包&#xff1a;https://download.csdn.net/download/yixin605691235/89543931 不同环境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、网关限…...

# 如何解决 App Store 审核中的 4.3(a) 问题:Guideline 4.3(a) - Design - Spam

如何解决 App Store 审核中的 4.3(a) 问题&#xff1a;Guideline 4.3(a) - Design - Spam 4.3(a) 审核问题是指&#xff1a;你的应用与其他开发者提交的应用在二进制文件、元数据和/或概念上存在相似之处&#xff0c;仅有微小差别。这通常会导致你的应用被视为垃圾应用而被拒绝…...

最长上升子序列(LIS)

最长上升子序列(最长递增子序列,LIS) 给定长度为 n n n的序列 v v v&#xff0c;求此序列中严格递增(上升)的子序列长度最大值(子序列可由原序列中不连续的元素构成) 朴素DP( O ( n 2 ) O(n^2) O(n2)) 闫氏DP分析法 状态表示&#xff1a; 集合 d p dp dp&#xff1a;所有满足…...

自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection

文章目录 1. 摘要概述2. 背景介绍3. 方法3.1 俯视图投影3.2 网络结构3.2.1 投影变换层3.2.2 投影变换层3.2.3 道路投影预测分支 3.3 车道预测头3.4 训练和真实值关联 4. 实验4.1 合成 3D 车道数据集4.2 真实世界 3D 车道数据集4.3 评估结果4.4 评估图像仅车道检测 5. 总结和讨论…...

手工创建 postgres kamailio 数据库

测试环境如下&#xff1a; postgres server 16&#xff1a; ip 地址为 192.168.31.100&#xff0c;用户 postgres 的密码为 ****** kamailio v5.7.5&#xff1a; ip 地址为 192.168.31.101 1.1. 创建 kamailio 用户和 kamailio 数据库 ssh 登陆 kamailio (192.168.31.101)&a…...

装饰设计模式

装饰设计模式应用在IO流上面可以得到体现 装饰模式指的是在不改变原类, 不使用继承的基础上&#xff0c;动态地扩展一个对象的功能。 原来的inputstream已经可以读取数据了&#xff0c;但是是一个字节一个字节的读取的&#xff0c;为了优化这个我们采用了buffered&#xff0c…...

Linux 线程初步解析

1.线程概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列。在linux中&#xff0c;由于线程和进程都具有id,都需要调度等等相似性&#xff0c;因此都可以用PCB来描述和控制,线程含有PCB&am…...

为ppt中的文字配色

文字的颜色来源于ppt不可删去的图像的颜色 从各类搜索网站中搜索ppt如何配色&#xff0c;有如下几点&#xff1a; 1.可以使用对比色&#xff0c;表示强调。 2.可以使用近似色&#xff0c;使得和谐统一。 3.最好一张ppt中&#xff0c;使用的颜色不超过三种主要颜色。 但我想强调…...

python-区间内的真素数(赛氪OJ)

[题目描述] 找出正整数 M 和 N 之间&#xff08;N 不小于 M&#xff09;的所有真素数。真素数的定义&#xff1a;如果一个正整数 P 为素数&#xff0c;且其反序也为素数&#xff0c;那么 P 就为真素数。 例如&#xff0c;11&#xff0c;13 均为真素数&#xff0c;因为 11 的反序…...

TCP/IP、UDP、HTTP 协议介绍比较和总结

TCP/IP、UDP、HTTP是网络通信中的三种重要协议,各自具有不同的特点和应用场景。以下是对这三种协议的详细介绍、比较和总结。 TCP/IP协议 传输控制协议/互联网协议(TCP/IP, Transmission Control Protocol/Internet Protocol) 特点: 可靠性:TCP提供可靠的通信,通过握手…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...