总结搭建一套神经网络的各层套路--撰写训练步骤

1.选择趁手的工具(损失函数、优化器)

       1. nn.CrossEntropyLoss() 交叉熵损失函数

        交叉熵损失函数是分类中最常用的损失函数,交叉熵是用来度量两个概率分布差异性的,用来衡量学习模型学习的分布和真实分布的差异。

        实例化工具:

import torch.nn as nn

loss_func = torch.nn.CrossEntropyLoss()

        具体计算过程不予深究,知道是个损失就行。具体研究过程见手册。

        注意输入张量尺寸,和目标尺寸要求:

        1. 具有类别索引的目标示例

        输入(即从神经网络最后出来的东西):

tensor([[ 1.0420, -0.4564, -0.2856,  0.8285,  0.1561],
        [-0.1080, -0.0666,  0.1174, -0.2689,  0.1834],
        [ 1.0693,  0.7028,  1.5643, -0.0080,  1.3160]], requires_grad=True)

3个列表对应batchsize=3,5个值代表5分类
大列表中的每个小列表中的五个值,代表对应索引类型的概率,

           target目标:

tensor([2, 0, 3])

就是第一个列表里,第(2+1)个是正确的选项
第二个列表,第(0+1)个是正确选项
第三个列表,第(3+1)个是正确选项

由此计算损失值

        2.具有类概率的目标示例:

tensor([[ 1.0420, -0.4564, -0.2856,  0.8285,  0.1561],
        [-0.1080, -0.0666,  0.1174, -0.2689,  0.1834],
        [ 1.0693,  0.7028,  1.5643, -0.0080,  1.3160]], requires_grad=True)

大列表中的每个小列表中的五个值,代表对应索引类型的概率

        输入相同

                target:

tensor([[0.2239, 0.1132, 0.4353, 0.0853, 0.1423],
        [0.3158, 0.0500, 0.0854, 0.5009, 0.0480],
        [0.0994, 0.1691, 0.2386, 0.2697, 0.2232]])

        目标概率格式也相同。

        2.优化器

        优化器的作用就是在反向传播获取梯度后,对网络模型根据获取的进行优化的工具。

实例化工具
    import torch.nn as nn
    optimizer = torch.optim.SGD(model.parameters(),lr=0.1)
                                ↑指向训练模型的参数  ↑学习率

        我们运用常用的SGD(随机梯度下降算法)进行梯度下降。

2.撰写训练过程

for epoch in range(10):                       ---训练的次数

    for data in train_iter:                   ---对数据集里的每个图片及标签迭代
        imgs,targets = data
        outpus = model(imgs)                  ---图片进网络
        result_loss = loss_func(outpus,targets)--计算网络输出和实际之间的损失
        optimizer.zero_grad()                 ---梯度清空,不清空的话梯度会累加
        result_loss.backward()                ---反向传播获取梯度
        optimizer.step()                      ---通过获取的梯度更新网络参数

        这只是一次训练所必要的步骤罗列,实际训练中为了可以更好的观察训练步骤1,需要写很多优化步骤。

你可能感兴趣的:(最简单的网络模型搭建,神经网络,深度学习,人工智能)