《昇思 25 天学习打卡营第 5天 | 网络构建 》

《昇思 25 天学习打卡营第 5天 | 网络构建 》

活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp
签名:Sam9029


网络构建

概念:

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

课程的解释如上, 我自己理解一下:

在 MindSpore 框架中,构建神经网络模型是创建和定义深度学习模型的过程。这些模型用于各种机器学习和人工智能任务,包括但不限于图像识别、自然语言处理、时间序列预测等。

关键目的和功能:

  • 神经网络通过学习数据的表示来进行预测或分类。
  • 提取输入数据的特征

同时构建神经网络模型是深度学习中的一个核心过程,MindSpore 提供了一套完整的工具和 API 来支持这个过程,

引入使用

import mindspore
from mindspore import nn, ops

定义模型类

class Network(nn.Cell):
    # 类Network继承自MindSpore的nn.Cell,用于构建神经网络模型

    def __init__(self):
        # 构造函数初始化网络层
        super().__init__()  # 调用基类的构造函数
        self.flatten = nn.Flatten()  # 实例化一个Flatten层,用于数据展平操作
        # 使用SequentialCell组织一系列按顺序执行的层
        self.dense_relu_sequential = nn.SequentialCell(
            nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"),  # 第一个全连接层,权重初始化为正态分布,偏置初始化为零
            nn.ReLU(),  # ReLU激活函数,引入非线性
            nn.Dense(512, 512, weight_init="normal", bias_init="zeros"),  # 第二个全连接层
            nn.ReLU(),  # 第二个ReLU激活函数
            nn.Dense(512, 10, weight_init="normal", bias_init="zeros")  # 第三个全连接层,输出维度为10
        )

    def construct(self, x):
        # 前向传播函数,定义数据通过网络的流程
        x = self.flatten(x)  # 将输入数据x展平为一维
        logits = self.dense_relu_sequential(x)  # 将展平后的数据通过SequentialCell中的层序列
        return logits  # 返回未经softmax转换的原始分类结果logits
实例化Network对象:
model = Network()

创建 Network 类的一个实例,这个实例包含了定义好的神经网络结构。

打印模型结构:
print(model)

输出模型的结构,展示了模型中的层和它们的配置。

模型结构输出解析:
Network<
  (flatten): Flatten<>
  (dense_relu_sequential): SequentialCell<
    (0): Dense<input_channels=784, output_channels=512, has_bias=True>
    (1): ReLU<>
    (2): Dense<input_channels=512, output_channels=512, has_bias=True>
    (3): ReLU<>
    (4): Dense<input_channels=512, output_channels=10, has_bias=True>
  >
>
  • Flatten<>:数据展平层,将输入数据展平为一维。
  • SequentialCell:顺序单元,包含一系列按顺序执行的层。
  • Dense:全连接层,包含输入通道数、输出通道数,以及是否有偏置项。
  • ReLU:激活层,使用ReLU激活函数。
创建输入数据:
X = ops.ones((1, 28, 28), mindspore.float32)

生成一个形状为 (1, 28, 28) 的全1张量,数据类型为 mindspore.float32,用作模型的输入。

模型前向传播获取原始预测值:
logits = model(X)

使用模型实例对输入数据 X 进行前向传播,获取原始的预测值 logits

原始预测值输出:
Tensor(shape=[1, 10], dtype=Float32, value=[
[-0.000508734, 0.00033919, 0.00046284, ..., -0.00120305, -0.00050569, 0.00039926]])

输出一个形状为 [1, 10] 的张量,包含了每个类别的原始预测值。

Softmax层获取预测概率:
pred_probab = nn.Softmax(axis=1)(logits)

使用 nn.Softmax 层对原始预测值 logits 应用 softmax 函数,获取每个类别的预测概率。

获取预测类别:
y_pred = pred_probab.argmax(1)

通过 argmax 函数沿指定轴(这里是轴1)找到最大值的索引,即预测的类别。

打印预测类别:
print(f"Predicted class: {y_pred}")

输出预测的类别。

预测类别输出:
```
Predicted class: [4]
```
最终输出预测的类别索引为4。

通过以上步骤,我们构建了一个简单的神经网络模型,实例化了模型对象,生成了输入数据,执行了前向传播,获取了原始预测值和预测概率,并最终确定了预测的类别。

这个过程展示了如何使用MindSpore框架进行基本的深度学习任务。


今天的网络构建就学到这些,有点难以理解,今天只能先了解概念,并走一遍简单的流程

千里之行,始于足下!

我会继续一步一步的保持学习,在 昇思社区 进行 AI 技术方面的探索和学习

希望能给同样对 AI 充满热情的你一些启发。记住,技术的世界无限广阔,让我们一起勇敢地迈出探索的脚步吧!🚀🤖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值