[Introducción a la inteligencia artificial] La ejecución del código requiere tiempo para calcularse, se utiliza GPU para entrenar la red y se convierten los elementos de lista de Tensor en Tensor, model.train() y model.eval()

[Introducción a la inteligencia artificial] La ejecución del código requiere tiempo para calcularse, se utiliza GPU para entrenar la red y se convierten los elementos de lista de Tensor en Tensor, model.train() y model.eval()


1. Cálculo del tiempo de ejecución del código.

import time
import math

def time_duration(start):
    s = time.time() - start
    m = math.floor(s/60)
    s -= m * 60
    return '%d分%d秒' %(m,s)

start = time.time()

print("hello world")

print('本轮训练时长:',time_duration(start))

2. Utilice GPU para entrenar la red.

  • Es fácil usar PyTorch para llamar a la GPU para entrenar la red, solo necesita enviar el modelo y los datos a la GPU.
  • Ejemplo de código:
# 1.创建模型
model = Net()
# 2.定义device
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 3.将模型加载到GPU(所定义的device) 
model.to(device)
# 4.将输入和输出加载到GPU
for data in train_dataloader:
	inputs, target = data
	inputs, target = inputs.to(device), target.to(device)
  • En la práctica real, entrenar una determinada red durante 160 rondas tomó 20 minutos y 29 segundos usando la CPU y 3 minutos y 56 segundos usando la GPU, y el efecto sigue siendo muy obvio.

3. La Lista cuyos elementos son Tensor se convierte en Tensor.

  • Convertir una Lista ordinaria en un Tensor es tan simple como lo siguiente.
a = [1, 2, 3]
b = torch.tensor(a)
  • Pero para una Lista que contiene tensor, se informará un error si utiliza el método anterior. Puede torch.stackconvertirlo de la siguiente manera.
a = torch.rand((2, 3))
a_list = [a for _ in range(3)]
A = torch.stack(a_list)

4. model.train() y model.eval()

  • PyTorch proporciona dos formas de cambiar entre los modos de entrenamiento y evaluación (inferencia): model.train() y model.eval().
  • El uso general es: escribir model.trian() antes de que comience el entrenamiento y model.eval() durante las pruebas.
  • Agregue model.train() encima del programa de entrenamiento 启用 batch normalization 和 dropout para garantizar que la capa BN pueda usar la media y la varianza de cada lote de datos, y Dropout pueda ignorar aleatoriamente algunas conexiones de red para entrenar y actualizar parámetros.
  • Agregue model.eval() encima del programa de inferencia 不启用 Batch Normalization 和 Dropoutpara garantizar que la media y la varianza de la capa BN permanezcan sin cambios y que el abandono falle, es decir, que se utilicen todas las conexiones de red y que las neuronas no se descarten aleatoriamente.

Supongo que te gusta

Origin blog.csdn.net/qq_44928822/article/details/130551617
Recomendado
Clasificación