网络构建
构建神经网络是学习机器学习不可缺少的技能。
mindspore为我们指定了网络的基类nn.cell我们可以轻松的继承父类来完成网络的自定义。
定义模型类
构建神经网络
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
在第一次打卡中我们详细的介绍过每一层的含义,并且举例对比过torch框架第一次打卡。
完成构建后可以通过实例化,检查网络
model = Network()
print(model)
返回结果:
Network<
(flatten): Flatten<>
(dense_relu_sequential): SequentialCell<
(0): Dense<input_channels=784, output_channels=512, has_bias=True>
(1): ReLU<>
(2): Dense<input_channels=512, output_channels=512, has_bias=True>
(3): ReLU<>
(4): Dense<input_channels=512, output_channels=10, has_bias=True>
>
>
可以通过model.parameters_and_names()获取模型参数名对应的参数详情。
for name, param in model.parameters_and_names():
print(f"Layer: {name}\nSize: {param.shape}\nValues : {param[:2]} \n")
由于本次打卡任务和第一次打卡重复率较高,详细内容可以参考我的第一次打卡内容第一次打卡
最后了经典合影留念: