[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()
import time
import math
deftime_duration(start):
s = time.time()- start
m = math.floor(s/60)
s -= m *60return'%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.将输入和输出加载到GPUfor 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 _ inrange(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.