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

文章目录

网络构建

在打卡第一天就简单演示了网络构建,一个神经网络模型表示为一个Cell,由不同的子Cell构成。使用这样的嵌套结构可以简单地使用面向对象编程的思维,对神经网络结构进行构建和管理。

继承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 logits

nn.Flatten是将28x28的2D张量转换为784大小的连续数组。
nn.SequentialCell是一个有序的Cell容器,输入Tensor将按照定义的顺序通过所有Cell。
代码块里nn.Dense为全连接层,其使用权重和偏差对输入进行线性变换。nn.ReLU层给网络中加入非线性的激活函数,帮助神经网络学习各种复杂的特征。

构造一个输入数据再调用模型,可以获得一个十维的Tensor输出,其包含每个类别的原始预测值。

model = Network()
X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
# print logits
logits

输出结果:Tensor(shape=[1, 10], dtype=Float32, value=
[[-5.08734025e-04, 3.39190010e-04, 4.62840870e-03 … -1.20305456e-03, -5.05689112e-03, 3.99264274e-03]])

再通过一个nn.Softmax层实例来获得预测概率

pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")

输出结果:Predicted class: [4]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空LA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值