基于深度学习的三维重建(二):pytorch的简单操作及DataLoader、Dataset类简介

目录

1.numpy举几个demo

2.pytorch基础

2.1 tensor介绍

3.简单版DataSet & DataLoader

4.模型构建

5.深度学习模型demo:手写文字识别

5.1  构建网络

5.2 前向传播过程

5.3 训练部分

5.4 测试部分

5.5 模型导出

5.6 模型测试

6.pytorch可视化工具tensorboard

7.pytorch实用小工具


1.numpy举几个demo

demo1:numpy索引

if __name__ == '__main__':
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a[1:])                                #从第二行开始切割
    print('\n')

    print(a[...,1])                             #第二列所有行
    print('\n')

    print(a[1,...])                             #第二行的所有列
    print('\n')

    print(a[...,1:])                            #从第一列开始切割的所有行

demo2:reshape

if __name__ == '__main__':
    a = np.arange(8)
    print(a)
    
    b = a.reshape(4,2)
    print(b)

demo3:transpose维度互换

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)

    b = a.transpose()
    print(b)

demo4:expand_dims

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)

    b = np.expand_dims(a,axis=0)
    print(b)
    print(b.shape)

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)

    b = np.expand_dims(a,axis=1)
    print(b)
    print(b.shape)

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)
    print('\n')
    b = np.expand_dims(a,axis=2)
    print(b)
    print(b.shape)

demo5:squeeze

if __name__ == '__main__':
    a = np.arange(9).reshape(1,3,3)

    y = np.squeeze(a)

    print(y)

demo6:concatenate

if __name__ == '__main__':
    a = np.array([[1,2],[3,4]])
    b = np.array([[5,6],[7,8]])

    print(np.concatenate((a,b),axis=0))

if __name__ == '__main__':
    a = np.array([[1,2],[3,4]])
    b = np.array([[5,6],[7,8]])

    print(np.concatenate((a,b),axis=1))

2.pytorch基础

2.1 tensor介绍

 demo1:数据转换

if __name__ == '__main__':
    data = [[1,2],[3,4]]
    x_data = torch.tensor(data)

    print(x_data)

demo2:数据转换

if __name__ == '__main__':
    data = np.array([[1,2],[3,4]])
    x_data = torch.from_numpy(data)

    print(x_data)

demo3:随机初始化

if __name__ == '__main__':
    shape = (2,3,)
    rand_tensor = torch.rand(shape)
    ones_tensor = torch.ones(shape)
    zeros_tensor = torch.zeros(shape)

demo4:

if __name__ == '__main__':
    shape = (2,3,)
    rand_tensor = torch.rand(shape)
    ones_tensor = torch.ones(shape)
    zeros_tensor = torch.zeros(shape,device="cuda")
    print(rand_tensor)
    print(ones_tensor)
    print(zeros_tensor)
    print(torch.cuda.is_available())
    print(f"shape of the tensor:{rand_tensor.shape}")
    print(f"datatype of the tensor:{rand_tensor.dtype}")
    print(f"Device of the tensor:{rand_tensor.device}")

if __name__ == '__main__':
    shape = (2,3,)
    rand_tensor = torch.rand(shape)
    ones_tensor = torch.ones(shape)
    zeros_tensor = torch.zeros(shape)
    zeros_tensor = zeros_tensor.to('cuda')
    print(rand_tensor)
    print(ones_tensor)
    print(zeros_tensor)
    print(torch.cuda.is_available())
    print(f"shape of the tensor:{rand_tensor.shape}")
    print(f"datatype of the tensor:{rand_tensor.dtype}")
    print(f"Device of the tensor:{zeros_tensor.device}")

3.简单版DataSet & DataLoader

        我们看MVSDataset类,代码在datasets/custom.py

        初始化,传入图片路径并定义一个类获取图片的列表

 

        重载样本获取方法:

        测试模型:

4.模型构建

        举例:

        在神经网络中,我们实现forward函数进行正向传播:

        有的时候(迁移学习,我们可能会禁用一些层的梯度):

        优化:

        模型加载和保存:

        train和eval模式介绍:

5.深度学习模型demo:手写文字识别

        先说一下我们自己搭建网络时候的一些文件夹属性:

        __pycache__是python自动生成的。

        checkpoints文件夹我们放模型数据用的,即训练权重(预训练权重):

        datasets:重写数据加载的py文件(定义自己的数据怎么输入到目标网络中的数据格式转换)

        model.py:模型文件,即算法主体。

        train.py、eval.py:训练和测试的脚本。

        data:放数据集

5.1  构建网络

        手写文字识别主要构建的是一个卷积神经网络,类的初始化初始化类别为10(0-9十个数字)

        定义了两个卷积层,nn.Sequential是一个存储器,我们调用layer1的时候执行layer1里面定义的操作顺序执行。

5.2 前向传播过程

        对于一个输入的图片,调用ConvNet中的卷积网络进行处理,输入是一张1*28*28的图片(batchsize=b),因此输入shape为b*1*28*28,经过layer1卷积后,shape变为b*16*14*14。经过layer2卷积后,shape变为b*32*7*7。对其展平,shape变成b*10,得到并返回结果。

5.3 训练部分

        判断gpu是否可用并配置参数,大型项目一般有config.py文件存储配置信息。

        加载数据。

        模型初始化:

         定义损失和优化器:

        开始训练:

5.4 测试部分

5.5 模型导出

5.6 模型测试

6.pytorch可视化工具tensorboard

        如何调用:模块加载

        运行train.py后,会在./log文件夹下保存一个类似events.out.tfevents.xxx

        如何打开这个文件呢?在终端输入 tensorboard --logdir=./log

        在浏览器打开网址:

        在代码中,需要先初始化tensorboard:

        看一下里面的参数:

7.pytorch实用小工具

        summary:

         输出示例:

猜你喜欢

转载自blog.csdn.net/qq_41694024/article/details/129042866