如何快速建立一个神经网络

整个网络的搭建基于pytorch的框架,其中 torch.nn 的命名空间包含了所有构建神经网络需要的基础组件。

基本模块

nn.Flatten 层 把二位图像打平成一维数组,tensor第一位置代表的是通道数,并不参与打平的运算

input_image = torch.rand(3,224,224)
print(input_image.size())
# torch.Size([3, 224, 224])
flatten = nn.Flatten()
flat_image = flatten(input_image)
print(flat_image.size())
# torch.Size([3, 50176])

nn.Linear

通过权重w和偏差b对输入数据进行线性变化,输出结果。这个最基本的神经网络结构

layer1 = nn.Linear(in_features=224*224, out_features=1024)
hidden1 = layer1(flat_image)
print(hidden1.size()
#torch.Size([3, 1024])

nn.ReLU

非线性激活函数,帮助神经网络引入非线性的特性

print(f"Before ReLU: {hidden1}\n\n")
hidden1 = nn.ReLU()(hidden1)
print(f"After ReLU: {hidden1}")
nn.Sequential

一个有序容器,把各个模块顺序连接起来

nn.Softmax

将(-无穷,+无穷)范围的数值,压缩到(0,1),用于表示模型对每个类别的预测概率

softmax = nn.Softmax(dim=1)
pred_probab = softmax(logits)

整体结构

# 引入对应的模块
import os
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
# 选择模型的训练资源
device = (
    "cuda"
    if torch.cuda.is_available()
    else "mps"
    if torch.backends.mps.is_available()
    else "cpu"
)
print(f"Using {device} device")
# 初始化神经网络实例,并把它迁移到对应的设备上
model = NeuralNetwork(224*224).to(device)
print(model)
# 验证输出
X = torch.rand(1, 224, 224, device=device)
logits = model(X)
pred_probab = nn.Softmax(dim=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")