• 多分类任务中不同隐藏层层数对实验结果的影响(使用GPU)


    1 导入包

    import torch 
    import torch.nn as nn
    import numpy as np
    import torchvision
    import torchvision.transforms as transforms
    import matplotlib.pyplot as plt
    from torch.utils.data import DataLoader,TensorDataset

    2 导入数据

    train_dataset = torchvision.datasets.MNIST('../Dataset/MNIST/',download = True,train = True,transform = transforms.ToTensor() )
    test_dataset = torchvision.datasets.MNIST('../Dataset/MNIST/',download = True,train = False,transform = transforms.ToTensor() )
    train_x = train_dataset.data.cuda().type(torch.float32)
    train_y = train_dataset.targets.cuda()
    test_x = test_dataset.data.cuda().type(torch.float32)
    test_y = test_dataset.targets.cuda()
    batch_size = 64
    train_data = TensorDataset(train_x,train_y)
    train_iter = DataLoader(
        dataset = train_data,
        shuffle = True,
        batch_size = batch_size
    )
    test_data = TensorDataset(test_x,test_y)
    test_iter = DataLoader(
        dataset = test_data,
        shuffle = True,
        batch_size = batch_size
    )

    3 定义模型

    class flatten(nn.Module):
        def __init__(self):
            super(flatten,self).__init__()
        def forward(self,x):
            return x.view(x.shape[0],784)
    
    class  Linear1(nn.Module ):
        def __init__(self,num_input,num_hidden,num_output):
            super(Linear1,self).__init__()
            self.linear1 = nn.Linear(num_input,num_hidden)
            self.linear2 = nn.Linear(num_hidden,num_output)
            self.flatten = flatten()
            self.relu = nn.ReLU()
        def forward(self,input):
            out = self.flatten(input)
            out = self.relu(self.linear1(out))
            out = self.linear2(out)
            return out
    class  Linear2(nn.Module ):
        def __init__(self,num_input,num_hidden1,num_hidden2,num_output):
            super(Linear1,self).__init__()
            self.linear1 = nn.Linear(num_input,num_hidden1)
            self.linear2 = nn.Linear(num_hidden1,num_hidden2)
            self.linear3 = nn.Linear(num_hidden2,num_output)
            self.flatten = flatten()
            self.relu = nn.ReLU()
        def forward(self,input):
            out = self.flatten(input)
            out = self.relu(self.linear1(out))
            out = self.relu(self.linear2(out))
            out = self.linear3(out)
            return out
    class  Linear3(nn.Module ):
        def __init__(self,num_input,num_hidden1,num_hidden2,num_hidden3,num_output):
            super(Linear1,self).__init__()
            self.linear1 = nn.Linear(num_input,num_hidden1)
            self.linear2 = nn.Linear(num_hidden1,num_hidden2)
            self.linear3 = nn.Linear(num_hidden2,num_hidden3)
            self.linear4 = nn.Linear(num_hidden3,num_output)
            self.flatten = flatten()
            self.relu = nn.ReLU()
        def forward(self,input):
            out = self.flatten(input)
            out = self.relu(self.linear1(out))
            out = self.relu(self.linear2(out))
            out = self.relu(self.linear3(out))
            out = self.linear4(out)
            return out

    4 定义损失函数和优化器

    num_input,num_hidden,num_output = 784,256,10
    lr = 0.001
    net = Linear1(num_input,num_hidden,num_output).cuda()
    loss = nn.CrossEntropyLoss(reduction='mean')
    # optimizer = torch.optim.Adam(net.parameters(),lr = lr)
    optimizer = torch.optim.SGD(net.parameters(),lr = lr)

    5 定义训练模型

    def train(net,train_iter,test_iter,loss,num_epochs,batch_size,optimizer):
        train_ls ,test_ls, train_acc,test_acc = [],[],[],[]
        for epoch in range(num_epochs):
            train_ls_sum,train_acc_sum,n = 0,0,0
            for x,y in train_iter:
                y_pred = net(x)
                l = loss(y_pred,y)
                optimizer.zero_grad()
                l.backward()
                optimizer.step()
                train_ls_sum +=l
                train_acc_sum += (y_pred.argmax(dim = 1) == y).sum().item()
                n += x.shape[0] 
            train_ls.append(train_ls_sum)
            train_acc.append(train_acc_sum/n)
            
            test_ls_sum,test_acc_sum ,n = 0,0,0
            for x,y in test_iter:
                y_pred = net(x)
                l = loss(y_pred,y)
                test_ls_sum +=l
                test_acc_sum += (y_pred.argmax(dim = 1) == y).sum().item()
                n += x.shape[0] 
            test_ls.append(test_ls_sum)
            test_acc.append(test_acc_sum/n)
            print('epoch: %d, train loss: %f, test loss: %f , train acc: %f, test acc: %f  '
                  %(epoch+1,train_ls[-1],test_ls[-1],train_acc[-1],test_acc[-1]))
        return train_ls,test_ls

    6 开始训练

    num_epochs = 40
    train_ls,test_ls = train(net,train_iter,test_iter,loss,num_epochs,batch_size,optimizer)
  • 相关阅读:
    3--Selenium环境准备--Eclipse 引入 selenium-server包
    2--Selenium环境准备--第一次使用Testng
    1--Selenium环境准备--Eclipse 添加Testng插件
    2--Jmeter 4.0--Excel 数据驱动 接口测试
    1--Jmeter4.0连接Oracle数据库
    冲刺第六天
    构建执法阅读笔记5
    学习进度八
    冲刺第五天
    冲刺第四天
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/15983826.html
Copyright © 2020-2023  润新知