04 Manipulação de dados + pré-processamento de dados [aprendizagem profunda prática v2]

Este artigo participou da atividade "Cerimônia de Criação do Recém-chegado" e iniciou o caminho da criação de Nuggets juntos

04 Manipulação de dados + pré-processamento de dados [aprendizagem profunda prática v2]

Manipulação de dados P1

Exemplo de matriz N-dimensional

  • Arrays N-dimensionais são os principais dados para aprendizado de máquina e redes neurais

insira a descrição da imagem aqui

insira a descrição da imagem aqui

criar matriz

  • Forma: por exemplo, matriz 3 × 4
  • Tipo de dados de cada elemento: por exemplo, float de 32 bits
  • O valor de cada elemento, como todos os 0s, ou um número aleatório

insira a descrição da imagem aqui

elemento de acesso

insira a descrição da imagem aqui

Implementação de manipulação de dados P2

manipulação de dados

Primeiro, importamos torch. Observe que, embora seja chamado de PyTorch, devemos importar torchem vez depytorch

import torch
复制代码

Um tensor representa uma matriz de valores, que pode ter várias dimensões

x = torch.arange(12)
x
复制代码
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
复制代码

A forma do tensor e o número total de elementos no tensor podem ser acessados ​​através das shapepropriedades do tensor

x.shape
复制代码
torch.Size([12])
复制代码
x.numel()
复制代码
12
复制代码

Para alterar a forma de um tensor sem alterar o número e o valor dos elementos, você pode chamar a reshapefunção

X = x.reshape(3, 4)
X
复制代码

Use todos os 0s, todos os 1s, outras constantes ou números amostrados aleatoriamente de uma distribuição específica

torch.zeros((2, 3, 4))
复制代码
tensor([[[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]],

        [[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]]])
复制代码
torch.ones((2, 3, 4))
复制代码
tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],

        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]])
复制代码
torch.randn(3, 4)
复制代码
tensor([[ 0.2104,  1.4439, -1.3455, -0.8273],
        [ 0.8009,  0.3585, -0.2690,  1.6183],
        [-0.4611,  1.5744, -0.4882, -0.5317]])
复制代码

Atribua um valor definido a cada elemento no tensor desejado fornecendo uma lista Python (ou lista aninhada) de valores

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
复制代码
tensor([[2, 1, 4, 3],
        [1, 2, 3, 4],
        [4, 3, 2, 1]])
复制代码
torch.tensor([[[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]])
复制代码
tensor([[[2, 1, 4, 3],
         [1, 2, 3, 4],
         [4, 3, 2, 1]]])
复制代码
torch.tensor([[[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]]).shape
复制代码
torch.Size([1, 3, 4])
复制代码

Operadores aritméticos padrão comuns ( , , e +) -podem *ser atualizados para operações elementares/**

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x**y
复制代码
(tensor([ 3.,  4.,  6., 10.]),
 tensor([-1.,  0.,  2.,  6.]),
 tensor([ 2.,  4.,  8., 16.]),
 tensor([0.5000, 1.0000, 2.0000, 4.0000]),
 tensor([ 1.,  4., 16., 64.]))
复制代码

Aplique mais cálculos em elementos

torch.exp(x)
复制代码
tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])
复制代码

Também podemos concatenar juntos

X = torch.arange(12, dtype=torch.float32).reshape((3, 4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
复制代码
(tensor([[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.],
         [ 2.,  1.,  4.,  3.],
         [ 1.,  2.,  3.,  4.],
         [ 4.,  3.,  2.,  1.]]),
 tensor([[ 0.,  1.,  2.,  3.,  2.,  1.,  4.,  3.],
         [ 4.,  5.,  6.,  7.,  1.,  2.,  3.,  4.],
         [ 8.,  9., 10., 11.,  4.,  3.,  2.,  1.]]))
复制代码

Construir tensores binários por meio de operadores lógicos

X == Y
复制代码
tensor([[False,  True, False,  True],
        [False, False, False, False],
        [False, False, False, False]])
复制代码

A soma de todos os elementos em um tensor produz um tensor com apenas um elemento

X.sum()
复制代码
tensor(66.)
复制代码

Mesmo que as formas sejam diferentes, ainda podemos realizar operações elementares chamando o mecanismo de transmissão

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b
复制代码
(tensor([[0],
         [1],
         [2]]),
 tensor([[0, 1]]))
复制代码
a + b
复制代码
tensor([[0, 1],
        [1, 2],
        [2, 3]])
复制代码

[-1]O último elemento pode ser selecionado com [1:3]e o segundo e terceiro elementos podem ser selecionados com

X[-1], X[1:3]
复制代码
(tensor([ 8.,  9., 10., 11.]),
 tensor([[ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.]]))
复制代码

Além de ler, também podemos escrever elementos na matriz especificando o índice

X[1, 2] = 9
X
复制代码
tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  9.,  7.],
        [ 8.,  9., 10., 11.]])
复制代码

Para atribuir o mesmo valor a vários elementos, basta indexar todos os elementos e atribuí-los

X[0:2, :] = 12
X
复制代码
tensor([[12., 12., 12., 12.],
        [12., 12., 12., 12.],
        [ 8.,  9., 10., 11.]])
复制代码

A execução de algumas operações pode fazer com que a memória seja alocada para novos resultados

before = id(Y)
Y = Y + X
id(Y) == before
复制代码
False
复制代码

realizar operações no local

Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))
复制代码
id(Z): 140452400950336
id(Z): 140452400950336
复制代码

XTambém podemos usar X[:] = X + You X += Ypara reduzir a sobrecarga de memória da operação se ela não for reutilizada em cálculos subsequentes

before = id(X)
X += Y
id(X) == before
复制代码
True
复制代码

Converter para Tensor NumPy

A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
复制代码
(numpy.ndarray, torch.Tensor)
复制代码

Converter um tensor de tamanho 1 em um escalar Python

a = torch.tensor([3.5])
a, a.item(), float(a), int(a)
复制代码
(tensor([3.5000]), 3.5, 3.5, 3)
复制代码

Implementação de pré-processamento de dados P3

pré-processamento de dados

Crie um conjunto de dados artificial e armazene-o em um arquivo csv (valores separados por vírgula)

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')
复制代码

Carregar o conjunto de dados bruto do arquivo csv criado

# 如果没有安装pandas,只需要取消以下行的注释:
# !pip install pandas
import pandas as pd

data = pd.read_csv(data_file)
print(data)
复制代码

Se em Jupyter, pode ser print(data)escrito comodata

   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000
复制代码

Para lidar com dados ausentes, métodos típicos incluem interpolação e exclusão , aqui, consideraremos a interpolação

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
复制代码
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN
复制代码

Para inputsvalores categóricos ou discretos em , tratamos "NaN" como uma categoria

inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
复制代码
   NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1
复制代码

Todas as entradas agora inputse outputsem são tipos numéricos, elas podem ser convertidas para o formato tensor

import torch

X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
X, y
复制代码
(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))
复制代码

Controle de qualidade de manipulação de dados P4

a = torch.arange(12)
b = a.reshape((3,4))
b[:] = 2
a
复制代码
tensor([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
复制代码

Acho que você gosta

Origin juejin.im/post/7085150846396137486
Recomendado
Clasificación