Pytorch深度学习【一】

数据操作及预处理

  • 数据操作
    • 主要数据结构—N维数组

      • 0-d(标量)—一个类别—1.0
      • 1-d(向量)—一个特征向量—[1.0, 2.7, 3.4]
      • 2-d(矩阵)—一个样本即为特征矩阵—[ [ 1,2,3 ] [ 4,5,6 ] ]
      • 3-d—RGB图片(宽* 高 * 通道数)—[ [ [ 1,2,3 ] [ 4,5,6 ] ][ [ 5,6,7 ] [ 8,9,5 ] ] ]
      • 4-d—一个RGB图片的批量(批量大小* 宽 * 高 * 通道)
      • 5-d—一个视频批量(批量大小* 时间 * 宽 * 高 * 通道)
    • 创建数组三要素

      • 形状
      • 数据类型
      • 每个元素的值
    • 访问元素遵循切片原则,注意,切片范围左闭右开,同时注意python中步长在何处定义

    • 实践

      import torch # 导入
      print(torch.__version__) # 查看版本号
      #张量表示的是一个数值组成的数组,这个数组可以有多个维度
      x = torch.arange(12) # 生成0-12的向量
      x.shape # 查看张量的形状
      x.numel() # 元素的种类数---12
      X = x.reshape(3, 4) # 改变一个张量大形状而不改变元素数量和元素值重写数据的形状---三行四列
      torch.zeros((2, 3, 4)) # 创建一个三行四列有两个通道的三维数组
      torch.tensor([[1,2,3], [4,5,6], [7,8,9]]) # 通过列表来为所创建的张量中的每个元素赋值---三行两列的二维数组通道数为一
      # 标准运算符按照对应位置元素进行运算
      x = torch.tensor([1.0, 2.0, 3.0])
      y = torch.tensor([2, 2, 2])
      x + y , x - y, x * y 
      torch.exp(y) # 指数运算
      X = torch.arange(12, dtype=torch.float32).reshape((3, 4))
      Y = torch.tensor([[1,2,3,4], [4,5,6,7], [7,8,9,10]])
      torch.cat((X,Y), dim=0) # 按行拼接
      torch.cat((X,Y), dim=1) # 按列拼接
      X.sum() # 对张量中所有元素进行求和会产生只有一个元素的张量
      X[-1] # 访问最后一行
      X[1:3] # 访问1-2行
      Z = torch.zeros_like(X) # 数据都为0但结构和X一致
      A = X.numpy() # 转变为numpy类型
      B = torch.tensor(A) # 转变torch类型
      
      • 注意广播机制对于错误的矩阵依然可以进行运算
      • 运行一些操作可能导致新结果分配内存
      before = id(Y)
      Y = Y + X
      id(Y) == before
      # 输出False---代表内存位置其实发生了变化
      Z = torch.zeros_like(Y)
      Z[:] = X + Y
      # 前后两次Z的内存地址不变
      # 也可以将Y = Y + X 改为Y += X这样其实也是内存地址不变
      
    • 数据预处理

      • 创建一个人工数据集,并存储在csv(逗号分隔值)文件
      import os
      os.makedirs(os.path.join('..', 'data'), exist_ok=True)
      data_file = os.path.join('..', 'data', 'house_tiny.csv')
      # makedirs(path, exist_ok=False)---path : 要创建的目录,绝对路径或者相对路径---exist_ok:如果已经存在怎么处理,默认是 False ,即:已经存在程序报错。当为 True 时,创建目录的时候如果已经存在就不报错。
      # os.path.join函数用于路径拼接文件路径,可以传入多个路径
      # .csv---每一行是一个数据,行内是用逗号分开的 house_tiny.csv就是自定义的文件
      with open(data_file, 'w') as f:
          f.write('NumRooms,Alley,Pricen') # 列名
          f.write('NA,Pave,127500n') # 人为构建数据样本四条
          f.write('2,NA,777500n')
          f.write('4,NA,347500n')
          f.write('NA,NA,140000n')
      
      • 从创建的csv文件中加载原始数据集
      # 读取必须要有pandas
      # !pip install pandas
      import pandas as pd
      data = pd.read_csv(data_file)
      print(data)
      

      效果图
      在这里插入图片描述

      • NA其实就是缺失的数据,处理缺失数据经典的方法包括插值和删除,这里采用插值
      import pandas as pd
      data = pd.read_csv(data_file)
      inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] # 对读取的数据进行切片分类为输入输出
      inputs = inputs.fillna(inputs.mean()) # 对于数值的列,mean方法是平均值补齐的填充的方法
      inputs = pd.get_dummies(inputs, dummy_na=True) # 将字符串独热码化
      print(inputs)
      

      效果图
      在这里插入图片描述

      • 使用torch将目前这个数值化后的数据集进行读入
      # 通过上述操作我们已将数据完全转化成为数值类型,因此可以将他们变为张量格式
      import torch
      x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
      # 但是这个操作张量大dtype=float64深度学习中我们一般采用32
      
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>