code: def train_loop(model, optimizer, train_loader, loss_func):
      model.train()
      num_epochs = 1
      for _i in range(num_epochs):
          total_loss, num = 0, 0
          for X, y in train_loader:
              optimizer.zero_grad()
              loss = loss_func(model(X), y)
              loss.backward()
              optimizer.step()
  
              total_loss += loss.sum()
              num += 1
          print(f"avg_loss: {total_loss / num}")
  
imports: import os
  import math
  import pytest
  from unittest import TestCase
  import torch
  from torch import nn
  from torch.utils.data import DataLoader, TensorDataset
  from test.pytorch.utils._train_torch_lightning import create_data_loader, data_transform
  from bigdl.nano.pytorch import TorchNano
  from bigdl.nano.pytorch.vision.models import vision
  from bigdl.nano.pytorch import nano
label_desc: Use image node_id 1 for calling a global function with example usage: train_loop(model, optimizer, train_loader, loss_func) without return types