Función torch.nn.Conv3d de PyTorch
Referencia de torch.nn de PyTorch
torch.nn.Conv3dEs el módulo de convolución 3D en PyTorch.
Procesa entradas tridimensionales, como video o imágenes médicas (profundidad x altura x anchura).
Definición de la función
torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
Forma de entrada
(batch, channels, depth, height, width)
Ejemplo de uso
Ejemplo 1: Uso básico
Ejemplo
import torch
import torch.nn as nn
# Convolución 3D
conv3d = nn.Conv3d(in_channels=3, out_channels=32, kernel_size=3, padding=1)
# Entrada: batch=2, canales=3, profundidad=16, altura=32, anchura=32
x = torch.randn(2, 3, 16, 32, 32)
output = conv3d(x)
print("Forma de entrada:", x.shape)
print("Forma de salida:", output.shape)
import torch.nn as nn
# Convolución 3D
conv3d = nn.Conv3d(in_channels=3, out_channels=32, kernel_size=3, padding=1)
# Entrada: batch=2, canales=3, profundidad=16, altura=32, anchura=32
x = torch.randn(2, 3, 16, 32, 32)
output = conv3d(x)
print("Forma de entrada:", x.shape)
print("Forma de salida:", output.shape)
Ejemplo 2: Clasificación de video
Ejemplo
import torch
import torch.nn as nn
class VideoCNN(nn.Module):
def __init__(self, num_classes=10):
super(VideoCNN, self).__init__()
self.conv1 = nn.Conv3d(3, 32, kernel_size=3, padding=1)
self.pool = nn.MaxPool3d(2)
self.conv2 = nn.Conv3d(32, 64, kernel_size=3, padding=1)
self.gap = nn.AdaptiveAvgPool3d(1)
self.fc = nn.Linear(64, num_classes)
def forward(self, x):
x = torch.relu(self.conv1(x))
x = self.pool(x)
x = torch.relu(self.conv2(x))
x = self.gap(x)
x = x.view(x.size(0), -1)
return self.fc(x)
model = VideoCNN()
x = torch.randn(4, 3, 16, 112, 112) # Video de 16 fotogramas
output = model(x)
print("Video:", x.shape, "-> Categoría:", output.shape)
import torch.nn as nn
class VideoCNN(nn.Module):
def __init__(self, num_classes=10):
super(VideoCNN, self).__init__()
self.conv1 = nn.Conv3d(3, 32, kernel_size=3, padding=1)
self.pool = nn.MaxPool3d(2)
self.conv2 = nn.Conv3d(32, 64, kernel_size=3, padding=1)
self.gap = nn.AdaptiveAvgPool3d(1)
self.fc = nn.Linear(64, num_classes)
def forward(self, x):
x = torch.relu(self.conv1(x))
x = self.pool(x)
x = torch.relu(self.conv2(x))
x = self.gap(x)
x = x.view(x.size(0), -1)
return self.fc(x)
model = VideoCNN()
x = torch.randn(4, 3, 16, 112, 112) # Video de 16 fotogramas
output = model(x)
print("Video:", x.shape, "-> Categoría:", output.shape)
Ejemplo 3: Cálculo de parámetros
Ejemplo
import torch
import torch.nn as nn
conv = nn.Conv3d(64, 128, kernel_size=3, padding=1)
# Cálculo de parámetros: out_ch * in_ch * k_d * k_h * k_w + bias
params = 128 * 64 * 3 * 3 * 3
print("Número de parámetros:", params)
print("Forma de los pesos:", conv.weight.shape)
import torch.nn as nn
conv = nn.Conv3d(64, 128, kernel_size=3, padding=1)
# Cálculo de parámetros: out_ch * in_ch * k_d * k_h * k_w + bias
params = 128 * 64 * 3 * 3 * 3
print("Número de parámetros:", params)
print("Forma de los pesos:", conv.weight.shape)
Escenarios de uso
- Procesamiento de video: Reconocimiento de acciones
- Imágenes médicas: CT、MRI
- Segmentación 3D: Datos de vóxeles
Nota: la convolución 3D requiere muchos cálculos y necesita mucha memoria de video.
Otras extensiones