昇思25天学习打卡营第3天|网络构建

学习目标:熟练掌握网络构建方法

  • 了解mindspore.nn
  • 实例构建简单的神经网络
  • 网络模型中各层参数

昇思大模型平台 AI实验室 学习记录:
在这里插入图片描述


一、关于mindspore.nn

在MindSpore中,Cell类是构建所有网络的基类,也是网络的基本单元。cell:神经细胞,神经元。
1.1 基类:基本单元
在这里插入图片描述
1.2 卷积神经网络层-种类
在这里插入图片描述
1.3 循环神经网络层
在这里插入图片描述
1.4 非线性激活函数层
在这里插入图片描述
在这里插入图片描述
1.5 线性层
在这里插入图片描述
1.6 drop层
在这里插入图片描述
1.7归一化层
在这里插入图片描述
1.8 池化层
在这里插入图片描述
1.9 填充层padding
在这里插入图片描述
1.10 损失函数
在这里插入图片描述
1.11 优化器
在这里插入图片描述
1.12 评价指标:演练验证模型评估
在这里插入图片描述
在这里插入图片描述
1.13 动态学习率:学习率衰减函数
在这里插入图片描述
1.14 图像处理层
在这里插入图片描述

1.5 更多接口请参考官方文档介绍
mindspore.nn的接口介绍


二、实例构建简单神经网络

提示:这里可以添加计划学习的时间

# Begin to show your code!
import mindspore
from mindspore import nn, ops


# 当我们定义神经网络时,可以继承nn.Cell类,在__init__方法中进行子Cell的实例化和状态管理,在construct方法中实现Tensor操作。
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"),  # 权值初始化:normal-生成正态分布(高斯分布)的随机数
            nn.ReLU(),
            nn.Dense(512, 10, weight_init="normal", bias_init="zeros")  # 十维的Tensor输出
        )

    def construct(self, x):  # model.construct()方法不可直接调用。
        x = self.flatten(x)
        logits = self.dense_relu_sequential(x)
        return logits


if __name__ == "__main__":
    model = Network()
    print(model)
    X = ops.ones((1, 28, 28), mindspore.float32)  # 构建一个28x28的输入
    logits = model(X)
    # print logits
    print(logits)
    pred_probab = nn.Softmax(axis=1)(logits)
    y_pred = pred_probab.argmax(1)
    print(f"Predicted class: {y_pred}")  # 预测结果类别为Predicted class: [3]

运行结果:成功
在这里插入图片描述

注:打印网络模型参数-权重,如下:

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")

三、 网络模型中各层作用

提示:这里统计学习计划的总量

3.1 mindspore.nn.Flatten:对输入Tensor的第0维之外的维度进行展平操作。
在这里插入图片描述

3.2 线性全连接层:mindspore.nn.Dense
在这里插入图片描述
3.3 激活层:mindspore.nn.ReLU
hidden中所有小于0的数值置0,大于0的不变。
在这里插入图片描述
3.4 系列神经元:mindspore.nn.SequentialCell

# showModelsParameter()
flatten = nn.Flatten()
layer1 = nn.Dense(in_channels=28 * 28, out_channels=20)  # 全连接层-线性
relu = nn.ReLU()

seq_modules = nn.SequentialCell(
    flatten,
    layer1,
    relu,
    nn.Dense(20, 10)  # 输出层
)
# 输入
input_image = ops.ones((3, 28, 28), mindspore.float32)
# 输出
logits = seq_modules(input_image)
print(logits.shape)

在这里插入图片描述
3.5 输出: mindspore.nn.Softmax
使用nn.Softmax将神经网络最后一个全连接层返回的logits的值缩放为[0, 1],表示每个类别的预测概率。axis指定的维度数值和为1。
在这里插入图片描述


四、网络模型参数

打印网络模型的各层名称和权值参数

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

在这里插入图片描述


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏常青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值