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

AI Agent开发实战系列 - LangGraph(8): 利用add_conditional_edges构建智能决策工作流

1. 理解LangGraph中的条件决策机制 在AI Agent开发中&#xff0c;动态决策能力是区分普通流程和智能系统的关键。LangGraph提供的add_conditional_edges方法就像给工作流装上了"智能导航系统"——我最近在客服工单系统中实践时发现&#xff0c;传统硬编码的分流规则需…...

Z-Image-Turbo-辉夜巫女GPU利用率:监控xinference.log与nvidia-smi协同调参指南

Z-Image-Turbo-辉夜巫女GPU利用率&#xff1a;监控xinference.log与nvidia-smi协同调参指南 1. 引言&#xff1a;为什么需要关注GPU利用率&#xff1f; 当你部署好一个像Z-Image-Turbo-辉夜巫女这样的文生图模型&#xff0c;看着它生成精美的图片时&#xff0c;有没有想过一个…...

FLUX.1-dev创作实战:从输入文案到生成图片,完整流程一次跑通

FLUX.1-dev创作实战&#xff1a;从输入文案到生成图片&#xff0c;完整流程一次跑通 1. 认识FLUX.1-dev&#xff1a;新一代AI图像生成引擎 FLUX.1-dev是Black Forest Labs推出的开源AI图像生成模型&#xff0c;以其出色的真实感和高效生成能力在开发者社区中广受好评。与常见…...

从SRCNN到WDSR:图像超分辨率核心演进路径与关键技术剖析

1. 图像超分辨率技术的基础认知 当你用手机拍下一张照片却发现放大后模糊不清时&#xff0c;图像超分辨率技术就能派上用场。这项技术就像给图像装上"显微镜"&#xff0c;能将低分辨率图片转化为清晰的高分辨率版本。不同于简单的插值放大&#xff0c;它通过深度学习…...

不露脸也能当主播?一文了解VTuber

不露脸也能当主播&#xff1f;一文了解VTuber很多人提到 VTuber&#xff0c;脑子里就是“二次元纸片人”在直播间卖萌。 但其实&#xff0c;你每天换的微信头像、用过的苹果拟我表情&#xff0c;短视频平台的3D头套全都是它的“远房亲戚”。 今天我们就把这层科技外衣扒开&…...

Java程序员的云原生时代生存指南:面向软件测试从业者的专业视角

在技术浪潮的冲击下&#xff0c;云原生已从概念演进为产业标准。对于广大Java程序员而言&#xff0c;这既是挑战也是机遇。传统的技术栈和开发模式正在经历深刻变革&#xff0c;而软件测试作为保障质量的关键环节&#xff0c;其理念与实践也随之迭代。 一、 挑战审视&#xff…...

小米智能家居无缝接入Home Assistant的3种高效方法

小米智能家居无缝接入Home Assistant的3种高效方法 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home Xiaomi Home集成是小米官方为Home Assistant提供的智能家居集成组件…...

MIKE URBAN中如何添加污水管水质

管网中的水质一直是管网模型中的一个难题&#xff0c;很多群友也要求小编更新水质方面的内容&#xff0c;一方面&#xff0c;其实水质相关的内容官方资料已经很多了&#xff0c; 觉得没必要重复更新。另一方面&#xff0c;管道水质率定实在太难以率定&#xff0c;很难算的准确。…...

AI Token Platform - AI Token 中转计费平台

AI Token Platform - AI Token 中转计费平台 AI Token Platform 是一款企业级 AI Token 中转与计费平台&#xff0c;深度融合 多模型 AI 网关、Kill Bill 计费引擎 与 企业级会员管理 三大核心能力。平台以"统一 API 接入 灵活计费策略 企业级会员体系"为核心理念…...

51单片机实战:从零构建电子密码锁系统

1. 项目背景与硬件准备 第一次接触51单片机时&#xff0c;我就被它的实用性深深吸引。作为电子爱好者入门的最佳选择&#xff0c;STC89C52这款经典芯片就像乐高积木的基础模块——价格亲民&#xff08;某宝20元就能买到开发板&#xff09;、资源丰富&#xff08;8K Flash、512…...