网络构建
学习心得
- 定义神经网络时,可以继承nn.Cell类,在__init__方法中进行子Cell的实例化和状态管理,在construct方法中实现Tensor操作
- MindSpore默认情况下是以动态图模式运行,但也支持通过设置set_context手工切换为静态图模式,也jit装饰器开启
案例
import mindspore as ms
from mindspore import nn, ops
ms.set_context(mode=ms.PYNATIVE_MODE) # 动态图模式
ms.set_context(mode=ms.GRAPH_MODE) # 静态图模式
class Network(nn.Cell):
def __init__(self):
super().__init__()
# 使用 Flatten 层将输入展平
self.flatten = nn.Flatten()
# nn.SequentialCell是一个有序的Cell容器。输入Tensor将按照定义的顺序通过所有Cell。我们可以使用SequentialCell来快速组合构造一个神经网络模型。
# 下面的例子包含两个隐藏层和一个输出层
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 展平
x = self.flatten(x)
# 前向传播
logits = self.dense_relu_sequential(x)
return logits
X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
pred_probab = nn.Softmax(axis=1)(logits)
print(pred_probab)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")
结果
[[0.10113075 0.10011511 0.09956549 0.09937003 0.10002089 0.10005981
0.10049177 0.10075468 0.10002148 0.09847002]]
Predicted class: [0]