Podríamos aplicar una transformación lineal a los datos entrantes usando el módulo torch.nn.Linear() en PyTorch. Este módulo está diseñado para crear una capa lineal en las redes neuronales. Una capa lineal calcula la transformación lineal de la siguiente manera:
Dónde
- son los datos entrantes. Debe ser un tensor de dtype float32 y forma (*, in_features). Aquí * es cualquier número de dimensiones. in_features es el número de características en los datos de entrada.
- son los datos de salida después de la transformación con el mismo tipo de d y con forma (*, out_features). Tenga en cuenta que todas las dimensiones excepto la última tienen la misma forma que los datos de entrada.
- es el peso aprendible de la forma (out_features, in_features). out_features es la última dimensión de los datos de salida.
- es el sesgo adicional aprendido durante el entrenamiento.
Tenga en cuenta que los pesos y sesgos se inicializan aleatoriamente.
Implementación paso a paso
A continuación se muestran los pasos a seguir para aplicar una transformación lineal a los datos entrantes:
Paso 1: Importar PyTorch
La biblioteca requerida es PyTorch. El primer paso es importar PyTorch.
Python3
import torch
Paso 2: Definir los datos de entrada
Ahora defina los datos de entrada. Vamos a aplicar una transformación lineal a estos datos. Los datos de entrada deben ser un Tensor de dtype float32. Creamos un tensor de tamaño [3, 4] usando un generador aleatorio. Podemos interpretar este tensor como una entrada de tres muestras cada una de tamaño 4. Aquí para los datos de entrada in_features = 4, vea el siguiente paso. Tenga en cuenta que en una red neuronal, estos datos provienen de la capa anterior.
Python3
data = torch.randn(3,4)
Paso 3: Definir la cantidad de entidades de entrada y salida
‘in_features’ es la cantidad de funciones en cada muestra de entrada y ‘out_features’ es la cantidad de funciones en cada muestra de salida. Las características internas dependen del tensor de entrada, ya que en el segundo paso las características internas = 4. Las características externas se deciden de acuerdo con nuestra necesidad y la arquitectura de la red neuronal.
Python3
in_features = 4 out_features = 2
Paso 4: Defina una Transformación Lineal
Definimos la transformación lineal ‘lineal’ usando el módulo torch.nn.Linear(). Pasamos in-features y out_features como parámetros. También podríamos pasar el parámetro opcional bias = False si no queremos que la capa aprenda el sesgo. Tenga en cuenta que el módulo torch.nn.Linear() funciona como una capa en la red neuronal.
Python3
linear = torch.nn.Linear(in_features, out_features)
Paso 5: aplique la transformación lineal a los datos de entrada:
Ahora aplicamos la transformación lineal definida a los datos de entrada (datos entrantes). Podríamos imprimir los datos de salida, la forma y el tamaño de los datos de salida después de la transformación.
Python3
data_out = linear(data)
Ejemplo 1:
Aquí in_features=5 como el tamaño de los datos de entrada es [5]. Y establecemos out_features = 3, por lo que el tamaño de los datos de salida (datos después de la transformación) es [3]. En el ejemplo anterior, los datos de entrada están en un tensor unidimensional.
Python3
# Python program to apply Linear transform # to incoming data # Step 1: Importing PyTorch import torch # Step 2: Define incoming data as torch # tensor (float32) data = torch.tensor([23., 12., 33., 4.01, -65.]) print("Data before Transformation:\n", data) print("dtype of Data:", data.dtype) print("Size of Data:", data.size()) # Step 3: Define the in_features, out_features in_features = 5 out_features = 3 # Step 4: Define a linear transformation linear = torch.nn.Linear(in_features, out_features) # Step 5: Apply the Linear transformation to # the tensor data_out = linear(data) print("Data after Transformation:\n", data_out) print("Size of Data after Transformation:", data_out.size())
Producción:
Puede obtener el tensor de salida con diferentes elementos en cada ejecución, ya que los pesos y sesgos se inicializan aleatoriamente.
Data before Transformation: tensor([ 23.0000, 12.0000, 33.0000, 4.0100, -65.0000]) dtype of Data: torch.float32 Size of Data: torch.Size([5]) Data after Transformation: tensor([-6.3559, -1.5512, 22.3267], grad_fn=<AddBackward0>) Size of Data after Transformation: torch.Size([3])
Ejemplo 2:
Aquí in_features=4 como el tamaño del tensor de entrada es [3, 4]. Y establecemos out_features = 2, por lo que el tamaño del tensor de salida (datos después de la transformación) es [3, 2]. La dimensión excepto la última dimensión es la misma que el tensor de entrada. La última dimensión es la misma que out_features.
Python3
# Python program to apply Linear transform # to incoming data # Step 1: Importing PyTorch import torch # Step 2: Define input data as torch tensor (float32) data = torch.randn(3, 4) print("Tensor before Transformation:\n", data) print("dtype of Tensor:", data.dtype) print("Size of Tensor:", data.size()) # Step 3: Define the in_features, out_features in_features = 4 out_features = 2 # Step 4: Define a linear transformation linear = torch.nn.Linear(in_features, out_features) # Step 5: Apply the Linear transformation to the tensor data_out = linear(data) print("Transformed Tensor:\n", data_out) print("Size of Transformed Tensor:", data_out.size())
Producción:
Puede obtener el tensor de salida con diferentes elementos en cada ejecución, ya que los pesos y sesgos se inicializan aleatoriamente.
Tensor before Transformation: tensor([[ 0.0664, 1.8933, -0.4003, -0.2383], [-0.7531, 1.8737, -2.0936, -0.8959], [-1.6239, -1.1321, -0.5427, -0.4834]]) dtype of Tensor: torch.float32 Size of Tensor: torch.Size([3, 4]) Transformed Tensor: tensor([[-0.5405, 0.4570], [-0.5507, -0.3917], [ 0.4763, -0.3399]], grad_fn=<AddmmBackward>) Size of Transformed Tensor: torch.Size([3, 2])
Publicación traducida automáticamente
Artículo escrito por shahidedu7 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA