神经网络Note

2019-05-21  本文已影响0人  delta1037

神经网络笔记

Note

数据处理
train_data = torchvision.datasets.CIFAR10(
    root='Datadir', train=True, transform=transforms.ToTensor(),download=True
)
train_loader = Data.DataLoader(dataset=train_data, batch_size=4, shuffle=True, num_workers=2)
训练模型
optimizer = optim.SGD(net.parameters(), lr=0.03)
loss_func = nn.CrossEntropyLoss()
# 循环使用数据训练50次
for epoch in range(50):
    # 训练
    # 每次训练之前的初始化loss&acc
    train_loss = 0
    train_acc = 0
    for i, data in enumerate(train_loader, 0):
        # 得到数据
        inputs, lables = data
        # 包装数据
        inputs, lables = Variable(inputs), Variable(lables)
        # 梯度清零
        optimizer.zero_grad()
        # 将输入输进网络&forward
        out = net(inputs)
        # 计算损失
        loss = loss_func(out, lables)
        train_loss += loss.item()
        
        # 计算正确率
        pred = torch.max(out, 1)[1]
        train_acc += (pred == lables).sum().item()
        
        # backward&optimize
        loss.backward()
        optimizer.step()

        train_loss += loss.data.item()

        if i % 2000 == 1999:
            # 格式化输出loss&acc
            print('[%d,%5d] loss:%.6f' % (epoch+1, i+1, train_loss/2000))
            print('[%d,%5d] acc: %.6f' % (epoch + 1, i + 1, train_acc / (2000 * lables.size(0))))
            # 训练2000组数据打印数据之后的初始化
            train_acc = 0
            train_loss = 0
            torch.save(net, 'Alex0.03.pkl')
    # 测试
    # 正确率初始化
    train_acc1 = 0
    for i, data in enumerate(test_loader, 0):
        # 得到数据并包装数据
        inputs, lables = data
        inputs, lables = Variable(inputs), Variable(lables)
        # 计算正确率
        out = net(inputs)
        pred = torch.max(out, 1)[1]
        train_acc1 += (pred == lables).sum().item()
        # 阶段性输出
        if i % 1000 == 999:
            print('testDataAcc:[%d,%5d] acc: %.6f' % (epoch + 1, i + 1, train_acc1 / (1000 * lables.size(0))))
            train_acc1 = 0

全连接神经网络

note

参考代码

卷积神经网络

参数计算

LeNet AlexNet VGG ResNet GoogLeNet

leNet

AlexNet

-cifar10数据集参考代码

代码做了简化,使用单个运算核心运行的
[图片上传失败...(image-cfa94a-1558405975881)]

note未跟随代码

VGG

ResNet

深度网络的退化问题
网络深度增加时,网络准确度出现饱和甚至开始下降
使用残差学习解决退化问题

残差学习相比原始特征直接学习更容易,当残差为0时,此时堆积层仅仅做了恒等映射.至少网络性能不会下降,实际上残差不会为0,也会使得堆积层在输入特征基础上学习到新的特征,从而有更好的性能

googLeNet

Inception

参考博客

上一篇 下一篇

猜你喜欢

热点阅读