【Pytorch学习 - 3】模型构建-聚类
¶什么是神经网络?
神经网络是由神经元通过层连接形成的,每个神经元是一个小的计算单元,每个神经元接受一个或多个带权重的输入,并通过激活函数(如sigmoid)判断是否产生一个有效输出。
如果我们希望能够控制神经元被激活的容易程度,可以对神经元加一个偏置值。
该神经元的输出结果公式即为下图所示,且由激活函数f(x)判断是否激活该神经元。
神经网络即是由这些神经元通过层连接形成的网络。不同神经元组成了3个层(输入层、隐藏层、输出层),其中隐藏层可以有多层。
¶建立神经网络
torch.nn
提供了自定义神经网络的几乎所有模块,在Pytorch中每个神经网络模型都是nn.Module
的子类,神经网络模型在实战往往中通过“层”甚至“子神经网络”来构建。
1 | # 调包 |
先定义一个继承nn.Module
的类,通过__init__
方法初始化神经网络模型的参数。然后定义一个forward
方法,在该方法中定义对数据的操作。
1 | class NeuralNetwork(nn.Module): # 继承Module |
展平层的作用就是将多维输入一维化,如下图所示:
[{"url":"https://img.chen0495.top/img2022/202208212139073.png","alt":"展平过程"},{"url":"https://img.chen0495.top/img2022/202208212141947.png","alt":"展平前"},{"url":"https://img.chen0495.top/img2022/202208212141562.png","alt":"展平后"}]
通过model = NeuralNetwork().to(device)
创建一个神经网络的实例,要使用这个实例,应该先将输入数据传递给他。调用实例会返回一个10维的张量,包含每个类别的概率。
1 | X = torch.rand(5, 28, 28, device=device) |
这里没有对模型进行训练,原文未指明,此处应该是个聚类模型。
输出模型权重和偏置值:
1 | print(f"First Linear weights: {model.linear_relu_stack[0].weight} \n") |
输出模型结构和参数:
1 | print("Model structure: ", model, "\n\n") |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chen0495的空间站!
评论