当前位置: 首页 > 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提供可靠的通信,通过握手…...

Unity Meta Quest 开发:如何在每只手指上添加 Poke 交互

XR 开发社区&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 找到玩家物体 OVRCameraRig 下的子物体 HandInteractorsRight/Left&#xff08;分别管理左右手的 Interactor&#xff09;下的 HandPokeInteractor 子物体&#x…...

MyBatis的原理?

MyBatis是一个优秀的持久层框架&#xff0c;它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数及获取结果集。MyBatis可以通过简单的XML或注解来配置和映射原生类型、接口和Java的POJOs&#xff08;Plain Old Java Objects&#xff09;为…...

数学基础【俗说矩阵】:齐次线性方程和非齐次线性方程求解-学习笔记

一、矩阵基础知识 二元一次方程的传统解法 不论是代入消元法还是加减消元法都统称 【高斯消元法】。 齐次方程组和非齐次方程组 线性方程组的解 线性方程的向量展示 向量规则 矩阵的高斯消元和初等行变行及其规则 高斯消元规则 初等行变换 矩阵经初等行变换成阶梯矩阵&…...

乐尚代驾项目概述

前言 2024年7月17日&#xff0c;最近终于在低效率的情况下把java及其生态的知识点背的差不多了&#xff0c;投了两个礼拜的简历&#xff0c;就一个面试&#xff0c;总结了几点原因。 市场环境不好 要知道&#xff0c;前两年找工作&#xff0c;都不需要投简历&#xff0c;把简历…...

脱发的 7 个原因,不能再瞒着大家了!

《黄帝内经》记载&#xff0c;“发为血之余,肾其华在发”。乌发飘逸的秀发&#xff0c;是年轻之体气血充盈、生机勃发的象征&#xff0c;更是纯粹天然、淡泊雅致的东方美学的体现。年轻一代不仅关注身体的养生&#xff0c;对头发的保护与保养也有了新的认识。头发已经成为当代年…...

Vim使用教程

目录 引言1. Vim的基本概念1.1 模式1.2 启动和退出 2. 基础操作2.1 导航2.2 插入文本2.3 删除和复制2.4 查找和替换 3. 高级功能3.1 多文件编辑3.2 宏录制和执行3.3 使用插件3.4 自定义快捷键 4. Vim脚本和自定义配置4.1 基本配置4.2 编写Vim脚本 5. 实用技巧5.1 快速移动5.2 批…...

前端开发体系+html文件详解

目录 html骨架 body主体内基本元素 基本元素 超文本&#xff08;超链接跳转&#xff09; 锚点 图片标签 列表标签 表格标签 框架标签&#xff08;窗口标签&#xff09; 音频标签 视频标签 VScode编译器 输入框 字体样式 实例展示&#xff1a; 首先简要介绍前端的整…...

小程序中用于跳转页面的5个api是什么和区别

在微信小程序中&#xff0c;用于页面跳转的API主要有以下几个&#xff0c;但通常不需要5个那么多&#xff0c;因为它们的功能各有侧重&#xff0c;用于不同的跳转场景。以下是这些API及其详细代码和区别&#xff1a; wx.navigateTo(OBJECT) 用于保留当前页面&#xff0c;跳转到…...

翁恺-C语言程序设计-10-0. 说反话

10-0. 说反话 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a;测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&#…...

langchain 入门指南(二)- 如何跟大模型对话

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 本文中&#xff0c;我们会通过一个简单的例子来展示如何使用 langchain 来调用大模型的 chat API&#xff08;使用 Chat Model&#xff…...