预备知识中 Data Manipulation 和 Data Preprocessing 的部分

介绍

N 纬数组介绍

Data Manipulation 数据操作

张量(tensor)表示一个数值表示的数组, 这个数组可能有多个纬度, 下面介绍一下 pytorch 里面基础的张量运算

Data Preprocessing 数据预处理

csv 全称 Comma-Seperated Values 即逗号分开的值, 是一种文本文件格式, 用来存储表格数据, 数据项之间通常用逗号分隔, 行与行之间用换行符分隔. 实际上, 可以使用其他符号, 例如;来做分隔符

下面通过一个读取csv文件的例子, 说明如何将csv中的数据读入 pytorch

首先构造一个csv文件

PYTHON
import os

os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')
    f.write('NA,Pave,127500\n')
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')
Click to expand and view more

从创建的文件中加载原始数据集

PYTHON
import pandas as pd

data = pd.read_csv(data_file)
print(data)
Click to expand and view more

会得到如下表格(第一列索引不是表格内容)

NumRoomsAlleyPrice
0NaNPave127500
12.0NaN106000
24.0NaN178100
3NaNNaN140000

为了处理缺失的数据, 常使用插值和删除的方法, 这里使用插值

PYTHON
# inputs: 所有行, 前两列数据, 房间数量和小巷
# outputs: 所有行, 最后一列数据, 价格
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]

# 使用 pd.get_dummies() 将 Alley 分成两类, dummy_na 表示是否为缺失值(NaN)创建一个新的独热编码列
# 当 dummy_na=True 时, 如果原始数据中有缺失值(NaN), 函数会创建一个新的列, 列名为原列名_nan, 并用True来标记所有原始值为NaN的行
inputs = pd.get_dummies(inputs, dummy_na=True)

print(inputs)
Click to expand and view more
NumRoomsAlley_PaveAlley_nan
0NaNTrueFalse
12.0FalseTrue
24.0FalseTrue
3NaNFalseTrue
PYTHON
# 使用平均值填充
inputs = inputs.fillna(inputs.mean())
print(inputs)
Click to expand and view more
NumRoomsAlley_PaveAlley_nan
03.010
12.001
24.001
33.001

最后转换为 torch 张量

PYTHON
import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
X, y
Click to expand and view more

输出

PLAINTEXT
(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500., 106000., 178100., 140000.], dtype=torch.float64))
Click to expand and view more

深度学习更多使用 float32 类型运算, 64位太慢了

Start searching

Enter keywords to search articles

↑↓
ESC
⌘K Shortcut