def METHOD_NAME(self, dataloaders, epochs, opt1, sch1):
    self.teaNet.train()
    minibatches_iterator = zip(*dataloaders)
    for epoch in range(epochs):
        minibatches = [(tdata) for tdata in next(minibatches_iterator)]
        all_x = torch.cat([data[0].cuda().float() for data in minibatches])
        all_z = torch.angle(torch.fft.fftn(all_x, dim=(2, 3)))
        all_y = torch.cat([data[1].cuda().long() for data in minibatches])
        all_p = self.teaNet(all_z)
        loss = F.cross_entropy(all_p, all_y, reduction='mean')
        opt1.zero_grad()
        loss.backward()
        if ((epoch+1) % (int(self.args.steps_per_epoch*self.args.max_epoch*0.7)) == 0 or (epoch+1) % (int(self.args.steps_per_epoch*self.args.max_epoch*0.9)) == 0) and (not self.args.schuse):
            for param_group in opt1.param_groups:
                param_group['lr'] = param_group['lr']*0.1
        opt1.step()
        if sch1:
            sch1.step()
        if epoch % int(self.args.steps_per_epoch) == 0 or epoch == epochs-1:
            print('epoch: %d, cls loss: %.4f' % (epoch, loss))
    self.teaNet.eval()