04 Manipulación de datos + preprocesamiento de datos [aprendizaje profundo práctico v2]

Este artículo ha participado en la actividad "Ceremonia de creación de recién llegados", y ha iniciado juntos el camino de la creación de Nuggets.

04 Manipulación de datos + preprocesamiento de datos [aprendizaje profundo práctico v2]

Manipulación de datos P1

Ejemplo de matriz N-dimensional

  • Las matrices N-dimensionales son los datos principales para el aprendizaje automático y las redes neuronales

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

crear matriz

  • Forma: por ejemplo, matriz de 3 × 4
  • Tipo de datos de cada elemento: por ejemplo, flotante de 32 bits
  • El valor de cada elemento, como todos los 0 o un número aleatorio

inserte la descripción de la imagen aquí

elemento de acceso

inserte la descripción de la imagen aquí

Implementación de manipulación de datos P2

manipulación de datos

Primero, importamos torch. Tenga en cuenta que aunque se llama PyTorch, debemos importar torchen lugar depytorch

import torch
复制代码

Un tensor representa una matriz de valores, que pueden tener múltiples dimensiones

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

Se puede acceder a shapela forma del tensor y al número total de elementos en el tensor a través de las propiedades del tensor

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

Para cambiar la forma de un tensor sin cambiar el número y el valor de los elementos, puede llamar a la reshapefunción

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

Use todos los 0, todos los 1, otras constantes o números muestreados aleatoriamente de una distribución 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]])
复制代码

Asigne un valor definido a cada elemento en el tensor deseado proporcionando una lista de Python (o una lista anidada) 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])
复制代码

Los operadores aritméticos estándar comunes ( +, -, *y ) /se **pueden actualizar a operaciones por elementos

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

Aplicar más cálculos por elementos

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

También 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 binarios a través de operadores lógicos

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

La suma de todos los elementos en un tensor produce un tensor con un solo elemento

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

Incluso si las formas son diferentes, aún podemos realizar operaciones por elementos llamando al mecanismo de transmisión

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]El último elemento se puede seleccionar con [1:3]y el segundo y tercer elementos se pueden seleccionar con

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

Además de leer, también podemos escribir elementos en la matriz especificando el índice

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

Para asignar el mismo valor a varios elementos, solo necesitamos indexar todos los elementos y asignarlos

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

La ejecución de algunas operaciones puede hacer que se asigne memoria para nuevos resultados

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

realizar operaciones en el lugar

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

XTambién podemos usar X[:] = X + Yo X += Ypara reducir la sobrecarga de memoria de la operación si no se reutiliza en cálculos posteriores

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

Convertir a tensor NumPy

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

Convierta un tensor de tamaño 1 en un escalar de Python

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

Implementación de preprocesamiento de datos P3

Preprocesamiento de datos

Cree un conjunto de datos artificial y guárdelo en un archivo csv (valores separados por comas)

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

Cargue el conjunto de datos sin procesar desde el archivo csv creado

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

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

Si en Jupyter, se puede print(data)escribir comodata

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

Para lidiar con los datos faltantes, los métodos típicos incluyen la interpolación y la eliminación , aquí consideraremos la interpolación.

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 o discretos en , tratamos "NaN" como una categoría

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 las entradas en ahora inputsy outputsen son de tipo numérico, se pueden convertir al formato de 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]))
复制代码

Control de calidad de manipulación de datos 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])
复制代码

Supongo que te gusta

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