PyTorch主要组成模块(十月学习)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

深入浅出pytorch第三期


pytorch构建深度学习模型分为基本配置,数据读取,模型构建,模型训练,模型评估

一、pytorch基本配置

一般是设备选择和超参数设置

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
#os.environ['CUDA_VISIBLE_DEVICES'] = '0,1' //0,1代表设备号
n_gpu = torch.cuda.device_count()
batch_size = 16
lr = 1e-4
max_epochs = 100
model.to(device)
     if n_gpu > 1:
        model = torch.nn.DataParallel(model)



二、数据读入

首先要把数据转换为datset

  • init: 定义自己的数据集
  • getitem: 根据索引index, 返回dataset[index],dataset在__init__中已经定义
  • len: 用于返回数据集的样本数
class MyDataset(Dataset):
    def __init__(self, data_dir, info_csv, image_list, transform=None):
        """
        Args:
            data_dir: path to image directory.
            info_csv: path to the csv file containing image indexes
                with corresponding labels.
            image_list: path to the txt file contains image names to training/validation set
            transform: optional transform to be applied on a sample.
        """
        label_info = pd.read_csv(info_csv)
        image_file = open(image_list).readlines()
        self.data_dir = data_dir
        self.image_file = image_file
        self.label_info = label_info
        self.transform = transform

    def __getitem__(self, index):
        """
        Args:
            index: the index of item
        Returns:
            image and its labels
        """
        image_name = self.image_file[index].strip('\n')
        raw_label = self.label_info.loc[self.label_info['Image_index'] == image_name]
        label = raw_label.iloc[:,0]
        image_name = os.path.join(self.data_dir, image_name)
        image = Image.open(image_name).convert('RGB')
        if self.transform is not None:
            image = self.transform(image)
        return image, label#返回的单个样本

    def __len__(self):
        return len(self.image_file)
data = MyDataset(data_dir, info_csv, image_list,transform=None)#初始化类,设置数据集所在路径以及变换
dataloader = DataLoader(data,batch_size=128,shuffle=True)#使用DataLoader加载数据,batch_size每个batch的sample数,shuffle=True时打乱数据集

三、模型构建

init:定义网络各个层
forward:定义网络的整个结构

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 输入图像channel:1;输出channel:6;5x5卷积核
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.conv2 = nn.Conv2d(6, 16, 5)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # 2x2 Max pooling
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # 如果是方阵,则可以只使用一个数字进行定义
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # 除去批处理维度的其他所有维度
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


net = Net()
print(net)

四、模型训练与评估

训练

model=Net()
optimizer=torch.optim.SGD(net.parameters(),lr=lr)#定义优化器
criterion= nn.MSELoss()#定义损失函数
def train(epoch):#进入当前epoch
    model.train()#模型进入训练状态,那么模型的参数应该支持反向传播的修改   
    train_loss = 0
    for data, label in dataloader:#读取数据
    	if torch.cuda.is_available():
        	data, label = data.cuda(), label.cuda()#将数据放入GPU
        optimizer.zero_grad()#将优化器的梯度会变成0(之前也讲过每次backward梯度都会累加)
        output = model(data)#得到模型输出
        loss = criterion(label, output)# 损失函数,计算损失
        loss.backward()#反向传播
        optimizer.step()#更新模型参数
        train_loss += loss.item()*data.size(0)#计算训练集的损失
    train_loss = train_loss/len(train_loader.dataset)#平均loss
	print('Epoch: {} \tTraining Loss: {:.6f}'.format(epoch, train_loss))

评估

def val(epoch):       
    model.eval()#验证/测试状态,则不应该修改模型参数    
    val_loss = 0
    with torch.no_grad():
        for data, label in val_loader:
            data, label = data.cuda(), label.cuda()
            output = model(data)
            preds = torch.argmax(output, 1)
            loss = criterion(output, label)
            val_loss += loss.item()*data.size(0)
            running_accu += torch.sum(preds == label.data)
    val_loss = val_loss/len(val_loader.dataset)
    print('Epoch: {} \tTraining Loss: {:.6f}'.format(epoch, val_loss))

引用

深入浅出pytorch
Pytorch自定义加载数据–自定义Dataset

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2022年10月,PyTorch深度学习框架将继续保持其在深度学习领域的领先地位。随着人工智能技术的不断发展,PyTorch将不断更新和改进,以适应新的挑战和需求。此时,PyTorch已经成为实现机器学习和深度学习的最先进、最强大的框架之一,广泛应用于各种领域,如图像识别、自然语言处理、语音识别等。 随着深度学习技术的普及和不断发展,PyTorch将不断优化其已有的功能和性能,提供更多的高级算法和工具。这将使得开发者可以更加轻松地实现更为复杂和精细的深度学习模型,从而提高机器学习的效率和精度。另外,PyTorch还将与其他先进技术结合,比如对抗生成网络(GANs)和强化学习,以实现更为高级的应用。 2022年10月,PyTorch深度学习框架还将更加注重安全和隐私保护,增加安全性和使用方便性,为用户提供更为广泛的应用场景。同时,PyTorch团队将持续进行社区建设,与全球的开发者和研究者合作,探索更具前瞻性的深度学习技术和应用。这将为2022年和未来的深度学习领域带来更多的新机遇和挑战。 ### 回答2: pytorch是一个开源机器学习框架,广泛应用于深度学习领域。随着人工智能和机器学习技术的不断进步,pytorch也在不断发展和完善。到2022年10月,pytorch肯定会有更多强大的功能和特性。 在未来,pytorch会更加注重开发人员的使用体验,提供更加易用和便捷的API和工具。同时,pytorch也将进一步推进自动化领域的研究和开发,自动化超参数、模型结构等方面的选择,不仅能够大幅提高模型训练的效率,同时也能够减少人工智能研究者的工作量和时间成本。 随着AI和大数据技术的不断发展,pytorch也会更加注重数据处理和分析能力,在大规模数据集和复杂任务下进行更加高效、准确和可靠的数据分析和处理。 总之,pytorch作为深度学习领域的知名框架,将会不断发展和完善,为广大人工智能开发者和研究人员带来更加优秀的工具和平台,助力科学家们实现更多技术的创新和改变。 ### 回答3: 2022年10月,PyTorch深度学习已经成为当今最受欢迎和使用的深度学习框架之一。PyTorch是一个由Facebook开发和维护的开源深度学习框架,它具有高度的灵活性、易于使用和热门的社区支持,而且在深度学习域内受到了广泛的认可。 在2022年10月,PyTorch深度学习应用已开始深入我们的生活和工作领域,它被应用于各种各样的领域,包括计算机视觉、自然语言处理、自动驾驶、医疗诊断等。 在计算机视觉领域,PyTorch深度学习被广泛应用于图像分类和目标检测,例如使用Convolutional Neural Network (CNN)实现人脸识别和图像分割。 在自然语言处理领域,PyTorch深度学习可用于文本分类、情感分析、机器翻译等任务,以及生成模型的研究和开发。 在自动驾驶领域,PyTorch深度学习可以用于道路识别、车辆识别和自动驾驶决策的学习和优化等。 在医疗诊断领域,PyTorch深度学习被应用于疾病识别、医学影像分类等任务中,帮助医生进行更准确、及时、可靠的诊断。 因此,可以预见,在2022年10月,PyTorch深度学习将继续在其应用范围和影响力上发挥着重大的作用,它将继续为深度学习领域带来更多的创新和进步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值