mindspore 网络构建

import mindspore
from mindspore import nn, ops
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

model = Network()
print(model)

从nn.Cell继承构建网络。用nn.SequentialCell可以将各个层串联起来。

Dense是线性层,前两个参数为输入和输出的维度长度,ReLU为非线性层。

construct是网络的构造函数。在手写数字识别上,先用flatten将手写数据识别的图片数据28*28的图片展平为512。最后输出为值表示10类计算的值。

X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")

用ops.ones构造一个简单的1张图片,大小28*28的。计算出结果后,用nn.Softmax进行归一化,最大的就是这类数字的概率。

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

可以通过以上方式输出模型层的名字和参数。

以上就是基本简单的网络构建方式。

最后给出和pytorch的接口对比


class NeuralNetwork(nn.Module):
    def __init__(self):
        # 继承父类nn.Module的方法和属性
        super(NeuralNetwork, self).__init__()
        # 数据进行展平操作
        self.flatten=nn.Flatten()
        # 定义一层线性神经网络
        self.hidden1=nn.Linear(28*28,128)
        self.hidden2=nn.Linear(128,128)
        self.hidden3=nn.Linear(128,64)
        self.out=nn.Linear(64,10)

     def forward(self,x):
        # 对输入数据进行展平操作
        x=self.flatten(x)
        # 将数据传入第一层线性神经网络
        x=self.hidden1(x)
        # 对神经网络的输出应用ReLU激活函数
        x=torch.relu(x)
        x=self.hidden2(x)
        # 对神经网络的输出应用sigmoid激活函数
        x=torch.sigmoid(x)
        x=self.hidden3(x)
        x=torch.relu(x)
        # 将数据传入输出层
        x=self.out(x)
        # 最后经过输出层输出预测结果x
        return x

逻辑基本一样,在接口上有细微差别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值