网络构建
- 如何手动构建一个神经网络模型就是今日的内容,神经网络是多层in-out通过relu连接起来的机器学习模型,也是最简单的机器学习模型。构建一个神经网络模型的步骤包括定义模型、
定义模型类
- 定义一个模型,需要确定其每一层的输入通道数与输出通道数以及其他参数,在连接层定义激活函数,如下是输入一张
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()
X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
模型层
input_image = ops.ones((3, 28, 28), mindspore.float32)
print(input_image.shape)
- Flatten:可以将图片张量28*28转为一维数组
- Relu:含有多种非线性激活函数,激活函数通俗理解为神经兴奋输出1,不兴奋输出0,非线性函数的输出还有很多种。
- Dense:为全连接层,进行线性变换,就是上述定义(in_channels=2828, out_channels=20),确定输出的通道数,打印输出的shape就是320
- SequentialCell:用来对神经网络层进行快速组装,将转换方式、输入数据、激活函数、全连接层放入其中
seq_modules = nn.SequentialCell(
flatten,
layer1,
nn.ReLU(),
nn.Dense(20, 10)
)
logits = seq_modules(input_image)
- Softmax:用来输出预测概率,输出值介于0-1之间。
模型参数
- 神经网络层有权重参数与偏置参数,如下图的hasbias=true就是偏置参数,下图为一个三层神经网络模型,1和3都是relu()激活函数,是节点与节点之间的突出或者映射。初始输入的通道数为784,输出的通道数为512,注意上一个输出的通道数一定为下一层的输入通道数,神经网络可以看做是多层in-out-in,层数与参数越多效果越好。
![在这里插入图片