昇思25天学习打卡营第06天 | 网络构建
文章目录
- 昇思25天学习打卡营第06天 | 网络构建
- 定义网络
- 网络层
- 模型预测
- 模型参数
- 总结
- 打卡
神经网络模型是由神经网络层和对Tensor的操作构成的。
在MindSpore,
Cell
类是网络的基本单元。一个神经网络模型表示为一个
Cell
,它由不同的子
Cell
构成。
定义网络
通过继承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"),
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()
网络层
nn.Flatten(start_dim=1, end_dim=-1)
:沿着从start_dim
到end_dim
的维度,对输入Tensor进行展平。nn.Dense
:全连接层,使用权重和偏差对输入进行线性变换。nn.ReLU
:给网络中加入非线性激活函数。nn.SequentialCell
:一个有序的Cell
容器,将输入Tensor按定义的顺序依次通过所有Cell
。nn.Softmax
:将网络最后一个全连接层返回的logits缩放为 [ 0 , 1 ] [0, 1] [0,1],表示每个类别的预测概率,axis
指定的维度数值和为 1 1 1。
模型预测
构造一个输入,直接调用模型,即可获得模型的输出 ,包含每个类别的原始预测值
model.construct()
方法不可直接调用。
X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
通过nn.Softmax
层实例来获得预测概率:
pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")
模型参数
神经网络层具有权重参数和偏置参数,这些参数会在训练过程中不断进行优化。
-通过model.parameters_and_names()
来获取参数名及对应的参数详情。
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")
总结
通过这一节的学习,对MindSpore中的网络模型有了基础认识,通过对Cell
类的继承,创建一个网络,并在__init__
中定义和创建子Cell
,并在construct
中进行Tensor的操作。此外,还学习了Flatten
、Dense
、ReLU
、SequentialCell
、Softmax
等基本网络层,还有通过`model.parameters_and_names()·访问模型参数的方法