Esempio n. 1
0
 def __init__(self):
     self.logger = Logger().get_logger()
Esempio n. 2
0
 def sleep(self, seconds):
     self.logger = Logger(loggername=self.classname).get_logger()
     time.sleep(seconds)
     self.logger.info("Sleep for {} seconds".format(seconds))
Esempio n. 3
0
import sys
import os
import shutil
import subprocess
sys.path.append('../')
from utils.log import Logger

basedir = os.path.split(os.path.realpath(__file__))[0] 
lockfile = os.path.join(os.path.dirname(basedir),'lock','install_base.lck')
logger = Logger(logname=os.path.join(os.path.dirname(basedir),'logs','install.log'),loglevel=
1,logger='install_base').getlog()
base_list = ['gcc','g++','make','zip','unzip','lrzsz','python-pip','python-dev']

def install_base():
    for base_pkg in base_list:
        child = subprocess.Popen(['apt-get','-y','install',base_pkg],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        (out,err) = child.communicate()
        logger.info(out)
        if err:
            logger.error(err)
    

def run():
    if os.path.exists(lockfile):
        print "You can only run this part once time"
        sys.exit(1)
    else:
        logger.info('++++++++++++++ start install_base ++++++++++++++++++')
        install_base()
        os.mknod(lockfile)
        logger.info('++++++++++++++ end install_base ++++++++++++++++++')
Esempio n. 4
0
                ap50_95, ap50 = evaluator.evaluate(self.yolov4)
                logger.info('ap50_95:{}|ap50:{}'.format(ap50_95, ap50))
                writer.add_scalar('val/COCOAP50', ap50, epoch)
                writer.add_scalar('val/COCOAP50_95', ap50_95, epoch)
                self.__save_model_weights(epoch, ap50)
                print('save weights done')
            else:
                assert print('dataset must be VOC or COCO')
            end = time.time()
            logger.info("  ===cost time:{:.4f}s".format(end - start))
        logger.info("=====Training Finished.   best_test_mAP:{:.3f}%====".format(self.best_mAP))


if __name__ == "__main__":
    global logger, writer
    parser = argparse.ArgumentParser()
    parser.add_argument('--weight_path', type=str, default='weight/mobilenetv3.pth', help='weight file path')#weight/darknet53_448.weights
    parser.add_argument('--resume', action='store_true',default=False,  help='resume training flag')
    parser.add_argument('--gpu_id', type=int, default=-1, help='whither use GPU(eg:0,1,2,3,4,5,6,7,8) or CPU(-1)')
    parser.add_argument('--log_path', type=str, default='log/', help='log path')
    parser.add_argument('--accumulate', type=int, default=2, help='batches to accumulate before optimizing')
    parser.add_argument('--fp_16', type=bool, default=False, help='whither to use fp16 precision')
    opt = parser.parse_args()
    writer = SummaryWriter(logdir=opt.log_path + '/event')
    logger = Logger(log_file_name=opt.log_path + '/log.txt', log_level=logging.DEBUG, logger_name='YOLOv4').get_log()

    Trainer(weight_path=opt.weight_path,
            resume=opt.resume,
            gpu_id=opt.gpu_id,
            accumulate=opt.accumulate,
            fp_16=opt.fp_16).train()
Esempio n. 5
0
def main():
    global args

    set_random_seed(args.seed)
    if not args.use_avai_gpus:
        os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu_devices
    use_gpu = torch.cuda.is_available()
    if args.use_cpu:
        use_gpu = False
    sys.stdout = Logger(osp.join(args.save_dir, "log.txt"))
    if use_gpu:
        print('Currently using GPU {}'.format(args.gpu_devices))
        cudnn.benchmark = True
    else:
        warnings.warn(
            'Currently using CPU, however, GPU is highly recommended')

    print('Initializing image data manager')
    dm = ImageDataManager(use_gpu, **trainset_kwargs(args))
    trainloader, testloader_dict = dm.return_dataloaders()

    print('Initializing model: {}'.format(args.arch))
    model = models.init_model(name=args.arch,
                              num_classes=dm.num_train_pids,
                              loss={'xent', 'htri'},
                              pretrained=not args.no_pretrained,
                              use_gpu=use_gpu)
    print('Model size: {:.3f} M'.format(count_num_param(model)))

    if args.load_weights and check_isfile(args.load_weights):
        load_pretrained_weights(model, args.load_weights)

    model = nn.DataParallel(model).cuda() if use_gpu else model

    criterion_xent = CrossEntropyLoss(num_classes=dm.num_train_pids,
                                      use_gpu=use_gpu,
                                      label_smooth=args.label_smooth)
    criterion_htri = TripletLoss(margin=args.margin)
    optimizer = init_optimizer(model, **optimizer_kwargs(args))
    scheduler = init_lr_scheduler(optimizer, **lr_scheduler_kwargs(args))

    if args.resume and check_isfile(args.resume):
        args.start_epoch = resume_from_checkpoint(args.resume,
                                                  model,
                                                  optimizer=optimizer)

    time_start = time.time()
    print('=> Start training')

    for epoch in range(args.start_epoch, args.max_epoch):
        train(epoch, model, criterion_xent, criterion_htri, optimizer,
              trainloader, use_gpu)

        scheduler.step()

        if (epoch + 1) > args.start_eval and args.eval_freq > 0 and (
                epoch + 1) % args.eval_freq == 0 or (epoch +
                                                     1) == args.max_epoch:
            print('=> Validation')

            print('Evaluating {} ...'.format(args.test_set))
            queryloader = testloader_dict['query']
            galleryloader = testloader_dict['test']
            rank1 = test(model, queryloader, galleryloader, use_gpu)

            save_checkpoint(
                {
                    'state_dict': model.state_dict(),
                    'rank1': rank1,
                    'epoch': epoch + 1,
                    'arch': args.arch,
                    'optimizer': optimizer.state_dict(),
                }, args.save_dir)

    elapsed = round(time.time() - time_start)
    elapsed = str(datetime.timedelta(seconds=elapsed))
    print('Elapsed {}'.format(elapsed))
Esempio n. 6
0
                       default='null',
                       help="Server codec for parameter averaging")
    parse.add_argument("--workers",
                       type=str,
                       default='worker.json',
                       help='Worker list file, json type')

    parse.add_argument("--network-bandwidth",
                       dest='bandwidth',
                       type=int,
                       default=100,
                       help='Network bandwidth in Mbps.')

    arg = parse.parse_args()

    logger = Logger(title_info='P-SGD User Submit', log_to_file=True)

    logger.log_message('Initializing with parameters: ')
    logger.log_message('\t --model <file name {}>'.format(arg.model_file))
    logger.log_message('\t --node_count <node count {}>'.format(arg.n))
    logger.log_message('\t --batch_size <batch size {}>'.format(arg.b))
    logger.log_message('\t --redundancy <r {}>'.format(arg.r))
    logger.log_message(
        '\t --codec <communication codec and protocol {}>'.format(arg.codec))
    logger.log_message(
        '\t --optimizer <optimizer for model training {}>'.format(arg.op))
    logger.log_message('\t --epochs <training epochs {}>'.format(arg.epochs))
    logger.log_message('\t --dataset <using {}>'.format(arg.dataset))
    logger.log_message('\t --non-iid <{}>'.format(arg.make_iid_dataset))

    logger.log_message('\t --gradient-descent <Gradient method {}>'.format(
Esempio n. 7
0
    parser.add_argument('--dataset', type=str, default='one-billion-words')
    args = parser.parse_args()
    os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu
    args.n_gpu = len(args.gpu.split(','))

    model_path = '../checkpoints/xlnet_maskedlm/{}'.format(args.dataset)
    log_path = '../logs/xlnet_maskedlm'

    args.model_path = model_path
    args.log_path = log_path

    if not os.path.exists(log_path):
        os.makedirs(log_path)
    log_file = '{}/{}.log'.format(log_path, args.dataset)
    print('The log file is ', log_file)
    logger = Logger(log_file)
    logger.logger.info(args)

    if not os.path.exists(model_path):
        os.makedirs(model_path)
    try:
        # load the pre-trained model and tokenizer
        tokenizer = XLNetTokenizer.from_pretrained(args.model_path)
        model = XLNetLMHeadModel.from_pretrained(args.model_path)
        logger.logger.info('Initialize XLNet from checkpoint {}.'.format(
            args.model_path))
    except:
        tokenizer = XLNetTokenizer.from_pretrained('xlnet-base-cased')
        model = XLNetLMHeadModel.from_pretrained('xlnet-base-cased')
        logger.logger.info('Initialize XLNet with default parameters.')
Esempio n. 8
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tornado
import tornado.web
import tornado.ioloop
import traceback
from utils.thread_pool import GThreadPool
from utils.log import Logger

logger = Logger("server")


class BaseHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self, *args):
        """
        args是从route正则中匹配出来的参数
        """
        GThreadPool.add_job(self._call_back, self.handler, *args)

    def _call_back(self, *args):
        try:
            func = args[0][0]
            tpargs = args[0][1:]
            func(*tpargs)
            message = "%s %s (%s)" % (self.request.method, self.request.uri,
                                      self.request.remote_ip)
            logger.info(message)
        except:
            traceback.print_exc()
Esempio n. 9
0
# -*- coding: utf-8 -*-
from utils.log import Logger
from global_ import global_cls
from utils.rwExcel import writeExcel
import time

mylogger = Logger(logger='Assertion').getlog()
errors = []


# 实际值与预期值的对比 如果实际值与预期值相等则pass,否则fail
def verifyEquals(web_tools, actual, expected, title):
    mylogger.info(title)
    try:
        assert actual == expected
        mylogger.info('pass!!!')
    except Exception as e:
        errors.append(e)
        mylogger.error('fail:  ' + " '" + actual + "'  !=  '" + expected)
        web_tools.screen_shot(title)


# 实际值与预期值的对比 如果实际值与预期值不等则pass,否则fail
def verifyNotEquals(web_tools, actual, expected, title):
    mylogger.info(title)
    try:
        assert actual != expected
        mylogger.info('pass!!!')
    except Exception as e:
        errors.append(e)
        mylogger.error('fail:  ' + " '" + actual + "'  ==  '" + expected)
Esempio n. 10
0
 def setUpClass(self):
     self.START_TIME = time.time()
     self.logger = Logger(CASE_NAME).get_logger()
     self.driver = get_driver()
     self.dr = Basic(self.driver, self.logger)
     self.p = ShelfPage(self.dr)
Esempio n. 11
0
import redis

from utils.redissub import RedisSub
from utils.redisvalue import RemoteRedis
import utils.exprv
from components.autohost import AutoHost
from utils.log import FileLogger, Logger
import components.hub as hub
import components.hosthandler as hosthandler

DEBUG = True

if not DEBUG:
    logger = FileLogger('expserver.txt')
else:
    logger = Logger()

exp_list = {}
rc = redis.Redis()

db = torndb.Connection("localhost", 'exp', user='******', password='******')


class Server(Greenlet):
    def __init__(self, channel='experiment'):
        super(Server, self).__init__()

        self.redis = rc
        self.sub = RedisSub(channel, self.on_message)

    def run(self):
Esempio n. 12
0
# -*- encoding: utf-8 -*-
import os
import json
import time
import signal
import traceback
from multiprocessing import (Value, Queue)
from config import (PROJECT_DIR, LOG_FILE, CAFFE_MODEL, CAFFE_DEPLOY,
                    LABEL_FILE, REDIS_JOB_KEY, MAX_PREDICT_PROCESS)
from utils import process
from utils.log import Logger
from utils.redis_tools import RedisTool
from specimen.revert import revert_image, is_symbol
from classifier import RecEngine

log = Logger(LOG_FILE).logger

QUEUE_SIZE = 5000
SLEEP_TIME = 0.001


class Agent(object):
    """
    OCR识别引擎
    """
    def __init__(self):
        self._stop = Value('d', 0)
        self.caffe_model = os.path.join(PROJECT_DIR, CAFFE_MODEL)
        self.caffe_deploy = os.path.join(PROJECT_DIR, CAFFE_DEPLOY)
        self.label_file = os.path.join(PROJECT_DIR, LABEL_FILE)
Esempio n. 13
0
def add_trigger(request):
    """创建触发器视图"""
    if request.method == 'GET':
        form_obj = trigger_form.AddTriggerForm()
        return render(request, 'add_trigger.html', {'form_obj': form_obj})
    elif request.method == 'POST':
        applications_id_list = request.POST.getlist('applications_id')
        items_id_list = request.POST.getlist('items_id')
        specified_item_key_list = request.POST.getlist('specified_item_key')
        operator_list = request.POST.getlist('operator')
        threshold_list = request.POST.getlist('threshold')
        logic_with_next_list = request.POST.getlist('logic_with_next')
        data_calc_func_list = request.POST.getlist('data_calc_func')
        data_calc_func_args_list = request.POST.getlist('data_calc_func_args')
        count = 0
        while count < len(applications_id_list):
            if applications_id_list[count] == '' and items_id_list[
                    count] == '' and threshold_list[count] == '':
                applications_id_list.pop(count)
                items_id_list.pop(count)
                specified_item_key_list.pop(count)
                operator_list.pop(count)
                threshold_list.pop(count)
                logic_with_next_list.pop(count)
                data_calc_func_list.pop(count)
                data_calc_func_args_list.pop(count)
                if count == 0:
                    pass
                else:
                    count -= 1
            else:
                count += 1
        trigger_data = {
            'name': request.POST.get('name'),
            'templates_id': request.POST.get('templates_id'),
            'severity': request.POST.get('severity'),
            'enabled': request.POST.get('enabled'),
            'memo': request.POST.get('memo')
        }
        form_obj = trigger_form.AddTriggerForm(trigger_data)
        if form_obj.is_valid():
            try:
                with transaction.atomic():
                    trigger_obj = models.Trigger.objects.create(
                        **form_obj.cleaned_data)
                    triggers_id = trigger_obj.id
                    for index in range(len(applications_id_list)):
                        trigger_expression_data = {
                            'triggers_id': triggers_id,
                            'applications_id': applications_id_list[index],
                            'items_id': items_id_list[index],
                            'specified_item_key':
                            specified_item_key_list[index],
                            'operator': operator_list[index],
                            'threshold': threshold_list[index],
                            'logic_with_next': logic_with_next_list[index],
                            'data_calc_func': data_calc_func_list[index],
                            'data_calc_func_args':
                            data_calc_func_args_list[index]
                        }
                        if trigger_expression_data['threshold'] == '':  # 无阈值
                            if trigger_expression_data[
                                    'applications_id'] != '' or trigger_expression_data[
                                        'items_id'] != '':  # 应用集或监控项不为空
                                raise Exception('触发器表达式有误,有应用集或监控项,但无阈值')
                        elif trigger_expression_data['threshold'] != '':  # 有阈值
                            if trigger_expression_data[
                                    'applications_id'] == '' or trigger_expression_data[
                                        'items_id'] == '':  # 应用集或监控项为空
                                raise Exception('触发器表达式有误,有阈值,但无对应应用集或监控项')
                            else:
                                if trigger_expression_data[
                                        'data_calc_func_args'] != '':
                                    json.loads(trigger_expression_data[
                                        'data_calc_func_args'])
                                if len(applications_id_list
                                       ) == index + 1:  # 最后一个表达式
                                    if trigger_expression_data[
                                            'logic_with_next']:
                                        raise Exception(
                                            '触发器表达式有误,最后一个表达式不能有逻辑关系符号')
                                models.TriggerExpression.objects.create(
                                    **trigger_expression_data)
                Logger().log(message='创建触发器成功,%s' % trigger_obj.name,
                             mode=True)
                return redirect('/monitor_web/trigger.html')
            except Exception as e:
                Logger().log(message='创建触发器失败,%s' % str(e), mode=False)
                raise ValidationError(_('添加触发器失败'), code='invalid')
        else:
            return render(request, 'add_trigger.html', {'form_obj': form_obj})
Esempio n. 14
0
 def __init__(self, node_id, offset):
     super().__init__(node_id, offset)
     # wait
     self.__log = Logger('ParaServer'.format(node_id), log_to_file=True)
     self.__done: [bool] = False
     self.__transfer: [ITransfer] = None
Esempio n. 15
0
 def click_search_btn(self):
     self.rec_search_btn().click()
     self.logger = Logger(loggername=self.__class__.__name__).get_logger()
     self.logger.debug(u'点击"立即登录 "按钮.')
Esempio n. 16
0
def main():

    tic = int(time())  # Identify the program process by the timestamp

    parser = AP()
    parser.add_argument('--config', type=str, help='Gym environment')
    opt = parser.parse_args()

    # Load configuration files as dictionaries.
    with open('configs/default.yaml') as f:
        default = yaml.load(f)
    try:
        with open(opt.config) as f:
            cfg = yaml.load(f)
        ParseConfig(cfg, default)
    except:
        cfg = default
        print(
            'No valid configuration file exists. Use default configurations.')

    # Set configurations
    env_name = cfg['ENV']
    agent_name = cfg['AGENT'].upper()
    brain = cfg['BRAIN']
    params = cfg['PARAMETERS']
    networks = cfg['NETWORKS']
    backend = networks['BACKEND']
    networks = networks['NETWORKS']
    gamma = params['GAMMA']
    theta = float(params['THETA'])
    lr = float(params['LEARNING_RATE'])
    eps_start = float(params['EPSILON_START'])
    eps_decay = float(params['EPSILON_DECAY'])
    eps_type = params['EPSILON_DECAY_TYPE']
    eps_end = float(params['EPSILON_END'])
    max_epoch = int(float(params['MAX_EPOCH']))
    max_step = int(float(params['MAX_STEP']))
    num_episode = int(float(params['NUM_EPISODE']))
    capacity = int(float(params['MEMORY_CAPACITY']))
    batch_size = int(float(params['BATCH_SIZE']))
    update = int(params['TARGET_UPDATE'])
    funcs = cfg['FUNCTIONS']
    vis = funcs['VIS']
    intv = funcs['INTERVAL']
    eval_flag = funcs['EVAL']
    memorize = funcs['MEMORIZE']
    logdir = funcs['LOGDIR']
    plot_flag = funcs['PLOT']
    verbose = funcs['VERBOSE']

    # Setup program logger
    if logdir and logdir[-1] != '/':
        logdir += '/'
    main_logger = Logger('Main',
                         logdir=logdir,
                         logfile='Main{}.log'.format(tic))
    main_logger('Program timestamp: {}'.format(tic))
    main_logger('Argument configurations:')
    main_logger(cfg)

    env = gym.make(env_name)
    main_logger('Environment Description:')
    main_logger('Environment type: {}'.format(env.class_name()))
    main_logger('Observation space: {}'.format(env.observation_space))
    main_logger('Action space: {}'.format(env.action_space))

    if agent_name == 'RANDOM':
        agent = RLAgents.core.RandomAgent(env=env)
    elif agent_name == 'POLICYITERATION':
        agent = RLAgents.PI.PolicyIterationAgent(env=env,
                                                 brain=brain,
                                                 theta=theta,
                                                 models=brain,
                                                 gamma=gamma)
        logfile = 'PILearn{}.log'.format(tic)
    elif agent_name == 'VALUEITERATION':
        agent = RLAgents.VI.ValueIterationAgent(env=env,
                                                brain=brain,
                                                theta=theta,
                                                models=brain,
                                                gamma=gamma)
        logfile = 'VILearn{}.log'.format(tic)
    elif agent_name == 'SARSA':
        agent = RLAgents.SARSA.SARSAAgent(env=env,
                                          brain=brain,
                                          epsilon=eps_start,
                                          epsilon_decay_type=eps_type,
                                          epsilon_decay=eps_decay,
                                          epsilon_end=eps_end,
                                          lr=lr,
                                          gamma=gamma)
        logfile = 'SARSALearn{}.log'.format(tic)
    elif agent_name == 'QLEARNING':
        agent = RLAgents.QL.QLearningAgent(env=env,
                                           brain=brain,
                                           epsilon=eps_start,
                                           epsilon_decay_type=eps_type,
                                           epsilon_decay=eps_decay,
                                           epsilon_end=eps_end,
                                           lr=lr,
                                           gamma=gamma)
        logfile = 'SARSALearn{}.log'.format(tic)
    elif agent_name == 'DQN':
        agent = RLAgents.DQN.GeneralDQNAgent(env=env,
                                             gamma=gamma,
                                             brain=brain,
                                             capacity=capacity,
                                             max_step=max_step,
                                             double=False,
                                             epsilon=eps_start,
                                             epsilon_decay=eps_decay,
                                             epsilon_decay_type=eps_type,
                                             epsilon_end=eps_end,
                                             network=networks[0],
                                             batch_size=batch_size,
                                             update=update,
                                             backend=backend,
                                             verbose=verbose)
        logfile = 'DQNLearn{}.log'.format(tic)
    elif agent_name == 'DDQN':
        agent = RLAgents.DQN.GeneralDQNAgent(env=env,
                                             gamma=gamma,
                                             brain=brain,
                                             capacity=capacity,
                                             max_step=max_step,
                                             double=True,
                                             epsilon=eps_start,
                                             epsilon_decay=eps_decay,
                                             epsilon_decay_type=eps_type,
                                             epsilon_end=eps_end,
                                             network=networks[0],
                                             batch_size=batch_size,
                                             update=update,
                                             backend=backend,
                                             verbose=verbose)
        logfile = 'DQNLearn{}.log'.format(tic)
    elif agent_name == 'DDPG':
        agent = RLAgents.DDPG.DDPGAgent(env=env,
                                        gamma=gamma,
                                        brain=brain,
                                        capacity=capacity,
                                        max_step=max_step,
                                        networks=networks,
                                        batch_size=batch_size,
                                        update=update,
                                        backend=backend,
                                        verbose=verbose)
        logfile = 'DDPGLearn{}.log'.format(tic)
    else:
        raise ValueError('The agent is not supported at this moment.')

    if max_epoch > 0:
        learn_logger = Logger('MainLearn', logdir=logdir, logfile=logfile)
        print('Start learning...')
        agent.learn(max_epoch=max_epoch, eval=eval_flag, logger=learn_logger)
        toc = int(time())
        main_logger('Learning takes {}s'.format(toc - tic))
    print('Start evaluation...')
    _ = agent.render(num_episode=num_episode,
                     vis=vis,
                     intv=intv,
                     logger=main_logger)
    if memorize:
        print('Saving learned models...')
        agent.save_brain(tic)
        main_logger('The model is saved.')
    if logdir and eval_flag and plot_flag:  # Plot can only be drawn when learning is evaluated and logged.
        main_logger('Plot episodic reward of learning process...')
        plot_learn(logdir + logfile)

    toc = int(time())
    main_logger('Program takes {}s'.format(toc - tic))
Esempio n. 17
0
Date: 2021/6/13
Describe:
"""
import json
import requests
import os
import sys
from utils.log import Logger

log_filename = os.path.realpath(sys.argv[1]).split("\\")[-1]. \
    replace(".py::", "_").replace("::", ".") \
    if sys.argv[1] else None
# log_filename = os.path.basename(__file__)
print(f"日志主文件路径={log_filename}")
print(f"Sys.argv参数列表={sys.argv}")
logger = Logger(log_filename).logger


class BaseApi:
    def __init__(self):

        self.logger = logger

    def request(self, request: dict):

        if request.get("protocol") == "rpc":
            return self.rpc_request(**request)

        if request.get("protocol") == "tcp":
            return self.tcp_request(**request)
Esempio n. 18
0
import time
from selenium.common.exceptions import NoSuchElementException
import os.path
from utils.log import Logger
from utils.config import DRIVER_PATH, REPORT_PATH

# create a logger instance
logger = Logger().get_logger()


class BasePage(object):
    '''
    configuration public method
    '''
    def __init__(self, driver):
        self.driver = driver

    def quit_browser(self):
        self.driver.quit()

    def forward(self):
        self.driver.forward()
        logger.info("Click forward button on current page")

    def back(self):
        self.driver.back()

    # 隐式等待
    def wait(self, seconds):
        self.driver.implicitly_wait(seconds)
Esempio n. 19
0
# -*- coding=utf-8 -*-
import time
import unittest

from selenium import webdriver

from api.send_request import SendRequest
from utils.config import Config, DRIVER_PATH, TestData, ENV, PLATFORM, CHROME_DRIVER_FILE
from os import path

from utils.log import Logger

logger = Logger(__name__).get()


class BaseTest(unittest.TestCase):
    def setUp(self):

        self.config = Config()
        self.test_data = TestData(env=ENV)

        self.options = webdriver.ChromeOptions()

        if PLATFORM == 'H5':
            # 模拟移动设备
            self.mobile_emulation = {'deviceName': 'iPhone 6'}
            self.options.add_experimental_option("mobileEmulation",
                                                 self.mobile_emulation)

        # for error:exited abnormally
        self.options.add_argument('--no-sandbox')
Esempio n. 20
0
# python3.x 方式
import importlib

importlib.reload(sys)

from utils.db import MyConnection
from utils.log import SysLogger as Logger

# debug开关
DEBUG = False
'''
日志初使化
采用两种日志类型:stdout 和 syslog,线上系统采用syslog日志
stdout日志使用场景:研发环境的调试、NBE系统
'''
logger = Logger('tornado', Logger.DEBUG_LEVEL)

# mysql database configuration
db = MyConnection(host='192.168.1.72:3306',
                  database='test',
                  user='',
                  password='',
                  logger=logger)

# 返回给ajax的数据
return_msg = dict(success=dict(err=0, status='00000', msg='', seqid=''),
                  error=dict(err=1, status=-1, msg=u'系统错误', seqid=''))

# 数据库ping的时间
db_ping_seconds = 1000
Esempio n. 21
0
def main(
        problem,
        popsize,
        algorithm,
        save_freq,
        loss_type=['trickLogD', 'minimax', 'ls'],
        postfix=None,
        nPassD=1,  #backpropagation pass for discriminator
        batchSize=64,
        metric="default",
        output_dir="runs",
        gradients_penalty=False):

    if not (problem in problem_table.keys()):
        exit(-1)

    #task
    task_args = problem_table[problem][1]
    task = problem_table[problem][0](nPassD, popsize, batchSize, metric)
    net_otype = task.net_output_type()

    # description
    description_name = '{}_{}_{}_{}'.format(
        str(task),
        algorithm,
        popsize,
        postfix if postfix is not None else "",
    )

    # share params
    nloss = len(loss_type)
    lr = task_args['lr']  # initial learning rate for adam G
    lrd = task_args['lrd']  # initial learning rate for adam D
    b1 = task_args['b1']  # momentum term of adam
    beta = task_args['beta']  # momentum term of adam
    samples = task_args['metric_samples']  # metric samples
    DIM = task_args['dim']  # momentum term of adam
    GP_norm = gradients_penalty  # if use gradients penalty on discriminator
    LAMBDA = 2.  # hyperparameter sudof GP

    # algorithm params
    if algorithm == "egan":
        VARIATION = "all"
        MULTI_OBJECTIVE_SELECTION = False
    elif algorithm == "moegan":
        VARIATION = "all"
        MULTI_OBJECTIVE_SELECTION = True
    elif algorithm == "smoegan":
        VARIATION = "deepqlearning"
        MULTI_OBJECTIVE_SELECTION = True
    else:
        exit(-2)

    # Load the dataset
    def create_generator_trainer(noise=None,
                                 discriminator=None,
                                 lr=0.0002,
                                 b1=0.5,
                                 DIM=64):
        return GeneratorTrainer(noise, task.create_geneator(noise, DIM),
                                discriminator, lr, b1)

    # MODEL D
    print("Building model and compiling functions...")
    # Prepare Theano variables for inputs and targets
    real_imgs = net_otype('real_imgs')
    fake_imgs = net_otype('fake_imgs')
    # Create neural network model
    discriminator = task.create_discriminator(DIM, GP_norm)
    # Create expression for passing real data through the discriminator
    real_out = lasagne.layers.get_output(discriminator, real_imgs)
    # Create expression for passing fake data through the discriminator
    fake_out = lasagne.layers.get_output(discriminator, fake_imgs)
    # Create loss expressions
    discriminator_loss = (
        lasagne.objectives.binary_crossentropy(real_out, 1) +
        lasagne.objectives.binary_crossentropy(fake_out, 0)).mean()

    # Gradients penalty norm
    if GP_norm is True:
        alpha = t_rng.uniform((batchSize, 1), low=0., high=1.)
        differences = fake_imgs - real_imgs
        interpolates = real_imgs + (alpha * differences)
        gradients = theano.grad(lasagne.layers.get_output(
            discriminator, interpolates).sum(),
                                wrt=interpolates)
        slopes = T.sqrt(T.sum(T.sqr(gradients), axis=(1)))
        gradient_penalty = T.mean((slopes - 1.)**2)
        D_loss = discriminator_loss + LAMBDA * gradient_penalty
        b1_d = 0.
    else:
        D_loss = discriminator_loss
        b1_d = 0.

    # Create update expressions for training
    discriminator_params = lasagne.layers.get_all_params(discriminator,
                                                         trainable=True)
    lrtd = theano.shared(lasagne.utils.floatX(lrd))
    updates_d = lasagne.updates.adam(D_loss,
                                     discriminator_params,
                                     learning_rate=lrtd,
                                     beta1=b1_d)
    #lrt = theano.shared(lasagne.utils.floatX(lr))

    # Fd Socre
    Fd = theano.gradient.grad(discriminator_loss, discriminator_params)
    Fd_score = beta * T.log(sum(T.sum(T.sqr(x)) for x in Fd))
    # max is ~7.5 for toy dataset and ~0.025 for real ones (it will be updated after 1 iteration, which is likely the worst one)
    Fd_auto_normalization = AutoNormalization(float(0.1))

    # Compile a function performing a training step on a mini-batch (by giving
    # the updates dictionary) and returning the corresponding training loss:
    train_d = theano.function([real_imgs, fake_imgs],
                              discriminator_loss,
                              updates=updates_d)

    # Compile another function generating some data
    dis_fn = theano.function([real_imgs, fake_imgs],
                             [fake_out.mean(), Fd_score])
    disft_fn = theano.function([real_imgs, fake_imgs], [
        real_out.mean(),
        fake_out.mean(), (real_out > 0.5).mean(),
        (fake_out > 0.5).mean(), Fd_score
    ])

    #main MODEL G
    noise = T.matrix('noise')
    generator_trainer = create_generator_trainer(noise, discriminator, lr, b1,
                                                 DIM)

    # Finally, launch the training loop.
    print("Starting training...")
    print(description_name)

    #build dirs
    path_front, path_logs, path_models, path_models_last, path_images = build_output_dirs(
        output_dir, description_name)

    #define a problem instance
    instances = []
    instances_old = []

    #generator of a offspring
    def generate_offsptring(xreal, loss_id, pop_id, inst=None):
        if inst == None:
            newparams = create_generator_trainer(noise=noise,
                                                 discriminator=discriminator,
                                                 lr=lr,
                                                 b1=b1,
                                                 DIM=DIM).get()
            inst = Instance(-float("inf"), float("inf"), newparams, -1, pop_id,
                            None)
        #init gen
        generator_trainer.set(inst.params)
        #train
        generator_trainer.train(loss_type[loss_id], task.noise_batch())
        #score
        xfake = generator_trainer.gen(task.noise_batch())
        frr_score, fd_score = dis_fn(xreal, xfake)
        #new instance
        new_instance = Instance(frr_score, fd_score, generator_trainer.get(),
                                loss_id, pop_id, xfake)
        #save
        instances.append(new_instance)
        #info stuff
        return new_instance

    #init varation
    variation = get_varation(VARIATION)(popsize, nloss, generate_offsptring)

    #reval pop with new D
    def reval_pupulation(in_instances):
        #ret
        out_instances = []
        #generates new batches of images for each generator, and then eval these sets by means (new) D
        for inst in in_instances:
            generator_trainer.set(inst.params)
            xfake = generator_trainer.gen(task.noise_batch())
            frr_score, fd_score = dis_fn(xreal_eval, xfake)
            out_instances.append(
                Instance(frr_score,
                         fd_score,
                         generator_trainer.get(),
                         inst.loss_id,
                         inst.pop_id,
                         xfake,
                         im_parent=True))
        return out_instances

    #log stuff
    LOG_HEADER, LOG_TEMPLATE = build_log_template(popsize, nloss)
    log = Logger(os.path.join(path_logs, 'logs.tsv'),
                 header=LOG_HEADER.encode())
    timer = Timer()
    losses_counter = [0] * nloss

    # We iterate over epochs:
    for n_updates in task.get_range():
        #get batch
        xmb = task.batch()
        #get eval batch
        if xmb.shape[0] == batchSize:
            xreal_eval = xmb
        else:
            xreal_eval = shuffle(xmb)[:batchSize]
        # initial G cluster
        if MULTI_OBJECTIVE_SELECTION:
            instances_old = reval_pupulation(instances)
        else:
            instances_old = instances
        #reset
        instances = []
        variation.update(instances_old, task.is_last())
        for pop_id in range(0, popsize):
            variation.gen(xreal_eval,
                          instances_old[pop_id] if n_updates else None, pop_id)

        if popsize <= (len(instances) + len(instances_old)):
            if MULTI_OBJECTIVE_SELECTION == True:
                #add parents in the pool
                instances = [*instances_old, *instances]
                #from the orginal code, we have to maximize D(G(X)),
                #Since in NSGA2 performences a minimization,
                #We are going to minimize -D(G(X)),
                #also we want maximize the diversity score,
                #So, we are going to minimize -diversity score (also we wanna normalize that value)
                cromos = {
                    idx:
                    [-float(inst.fq), -float(Fd_auto_normalization(inst.fd))]
                    for idx, inst in enumerate(instances)
                }  # S2
                cromos_idxs = [idx for idx, _ in enumerate(instances)]
                finalpop = nsga_2_pass(popsize, cromos, cromos_idxs)
                instances = [instances[p] for p in finalpop]
                with open(os.path.join(path_front, 'last.tsv'),
                          'wb') as ffront:
                    for inst in instances:
                        ffront.write(
                            (str(inst.fq) + "\t" + str(inst.fd)).encode())
                        ffront.write("\n".encode())
            elif nloss > 1:
                #sort new
                instances.sort(key=lambda inst: inst.f()
                               )  #(from the orginal code in github) maximize
                #cut best ones
                instances = instances[len(instances) - popsize:]

        for i in range(0, popsize):
            xreal, xfake = task.statistic_datas(instances[i].img)
            tr, fr, trp, frp, fdscore = disft_fn(xreal, xfake)
            fake_rate = np.array([fr]) if i == 0 else np.append(fake_rate, fr)
            real_rate = np.array([tr]) if i == 0 else np.append(real_rate, tr)
            fake_rate_p = np.array([frp]) if i == 0 else np.append(
                fake_rate_p, frp)
            real_rate_p = np.array([trp]) if i == 0 else np.append(
                real_rate_p, trp)
            FDL = np.array([fdscore]) if i == 0 else np.append(FDL, fdscore)
            losses_counter[instances[i].loss_id] += 1

        # train D
        for xreal, xfake in task.iter_data_discriminator(xmb, instances):
            train_d(xreal, xfake)

        #show it info
        print(n_updates, real_rate.mean(), real_rate_p.mean())

        #write logs
        log.writeln(
            LOG_TEMPLATE.format(n_updates, str(timer), fake_rate.mean(),
                                real_rate.mean(), *fake_rate, *real_rate, *FDL,
                                *losses_counter).encode())
        #varation logs
        variation.logs(path_logs, n_updates, last_iteration=task.is_last())

        if (n_updates % save_freq == 0
                and n_updates != 0) or n_updates == 1 or task.is_last():
            #it same
            if task.is_last():
                id_name_update = math.ceil(float(n_updates) / save_freq)
            else:
                id_name_update = math.floor(float(n_updates) / save_freq)
            #if is egan, eval only the best one.
            if MULTI_OBJECTIVE_SELECTION == True:
                instances_to_eval = instances
            else:
                instances_to_eval = [instances[-1]]
            #metric
            metric_results = task.compute_metrics(
                instances_to_eval,
                lambda inst, nz: generator_trainer.set(inst.params).gen(nz),
                samples)
            #mmd2 output
            print(n_updates, "metric:", np.min(metric_results), "id:",
                  np.argmin(metric_results))
            #best
            best = np.argmin(metric_results)
            worst = np.argmax(metric_results)
            np.savez(
                os.path.join(path_models, 'dis_%s.npz') % (id_name_update),
                *lasagne.layers.get_all_param_values(discriminator))
            np.savez(
                os.path.join(path_models, 'gen_%s.npz') % (id_name_update),
                *instances_to_eval[best].params)
            #save best
            generator_trainer.set(instances_to_eval[best].params)
            xfake_best = generator_trainer.gen(task.noise_batch(samples))
            #worst_debug
            generator_trainer.set(instances_to_eval[worst].params)
            xfake_worst = generator_trainer.gen(task.noise_batch(samples))
            #save images
            task.save_image(xmb, xfake_best, path_images,
                            "best_%s" % (id_name_update))
            task.save_image(xmb, xfake_worst, path_images,
                            "worst_%s" % (id_name_update))
            #print pareto front
            with open(
                    os.path.join(path_front, '%s.tsv') % (id_name_update),
                    'wb') as ffront:
                for idx in range(len(instances_to_eval)):
                    ffront.write((str(instances_to_eval[idx].fq) + "\t" +
                                  str(instances_to_eval[idx].fd) + "\t" +
                                  str(metric_results[idx])).encode())
                    ffront.write("\n".encode())
            #save all last models:
            if task.is_last():
                for key, inst in enumerate(instances_to_eval):
                    np.savez(
                        os.path.join(path_models_last, 'gen_%s.npz') % (key),
                        *inst.params)
Esempio n. 22
0
else:
    redis_session = Operation_Redis()

log_path = ''
if (platform.system() == 'Windows'):
    log_path = 'D:\\log\\flask_log\\'
elif (platform.system() == 'Linux'):
    log_path = '/home/log/flask_log/'
else:
    pass
if (not os.path.exists(log_path)):
    os.mkdir(log_path)

if 'log' in sections:
    logger = Logger(
        log_path + config.get('log', 'filename'),
        level=config.get('log', 'level'),
        when=config.get('log', 'when'),
        interval=config.getint('log', 'interval'),
        backCount=config.getint('log', 'backCount'),
    ).logger
else:
    logger = Logger(log_path + 'server.log', when='midnight').logger

if __name__ == '__main__':
    mongo_session.drop_collection("2B20_craft")
    mongo_session.drop_collection("2B21_craft")
    mongo_session.drop_collection("2B22_craft")
    mongo_session.drop_collection("2B23_craft")
    mongo_session.drop_collection("furnace")
Esempio n. 23
0
    # Flag to use FP16 GPU precision.
    parser.add_argument(
        "--fp_16",
        type=bool,
        default=False,
        help="whither to use fp16 precision",
    )

    # Parse the arugments into Option objects.
    opt = parser.parse_args()

    # Instantiate Tensorboard summary writer to even folder.
    writer = SummaryWriter(logdir=opt.log_path + "/event")

    # Initialize python logger.
    logger = Logger(
        log_file_name=opt.log_path + "/log.txt",
        log_level=logging.DEBUG,
        logger_name="YOLOv4",
    ).get_log()

    # Instantiate the trainer and start the training process.
    Trainer(
        weight_path=opt.weight_path,
        resume=opt.resume,
        gpu_id=opt.gpu_id,
        accumulate=opt.accumulate,
        fp_16=opt.fp_16,
    ).train()
Esempio n. 24
0
# coding=utf-8
# author:ss

import requests
from utils.log import Logger
import json
import traceback
from utils.formatVlidation import check_json_format

log = Logger()

# requests.adapters.DEFAULT_RETRIES = 5


class BaseApi(object):
    def __init__(self, url, header=None):
        self.header = header
        self.url = url

    def send_request(self, method, data=None, cookies=None):
        try:
            if method == "get":
                req = requests.get(self.url,
                                   headers=self.header,
                                   params=data,
                                   cookies=cookies)
            elif method == "post":
                if self.header is not None and self.header.get(
                        "Content-Type") == "application/json":
                    req = requests.post(self.url,
                                        headers=self.header,
Esempio n. 25
0
 def get_page_title(self):
     self.logger = Logger(loggername=self.classname).get_logger()
     self.logger.info("Current page title is {}".format(self.driver.title))
     return self.driver.title
Esempio n. 26
0
    parser.add_argument('--visiual',
                        type=str,
                        default='E:\YOLOV4/test_pic',
                        help='val data path or None')
    parser.add_argument('--mode',
                        type=str,
                        default='val',
                        help='val or det or study')
    parser.add_argument('--heatmap',
                        type=str,
                        default=False,
                        help='whither show attention map')
    opt = parser.parse_args()
    writer = SummaryWriter(logdir=opt.log_val_path + '/event')
    logger = Logger(log_file_name=opt.log_val_path + '/log_val.txt',
                    log_level=logging.DEBUG,
                    logger_name='CIFAR').get_log()

    if opt.mode == 'val':
        Evaluation(gpu_id=opt.gpu_id,
                   weight_path=opt.weight_path,
                   visiual=opt.visiual,
                   heatmap=opt.heatmap).val()
    if opt.mode == 'det':
        Evaluation(gpu_id=opt.gpu_id,
                   weight_path=opt.weight_path,
                   visiual=opt.visiual,
                   heatmap=opt.heatmap).Inference()
    else:
        Evaluation(gpu_id=opt.gpu_id,
                   weight_path=opt.weight_path,
Esempio n. 27
0
 def __init__(self, driver):
     self.driver = driver
     self.classname = self.__class__.__name__
     self.logger = Logger(loggername=self.classname).get_logger()
Esempio n. 28
0
 def rec_search_btn(self):
     self.logger = Logger(loggername=self.__class__.__name__).get_logger()
     self.logger.debug(u'找到百度一下Input.')
     return self.find_element(selector='id=>su')
Esempio n. 29
0
def setup_train(i, corpus, args):
    """Setup training.

    Handles CPU, single GPU, and distributed training.

    Args:
        i: The process index. Since one process per GPU, this is also
            the GPU index. For single GPU or CPU this is set to 0.
        corpus: The corpus for training.
        args: Arguments from argparse and main().
    """
    args.device = torch.device(args.device.type, i)

    # Find rank among all processes.
    args.rank = args.node_rank * args.gpu_per_node + i

    log = Logger(i, args.tensorboard_dir)
    log.train_add_text('arguments', str(args))
    log.valid_add_text('arguments', str(args))

    if args.dist:
        dist.init_process_group(backend='nccl',
                                init_method='env://',
                                world_size=args.world_size,
                                rank=args.rank)
        torch.cuda.set_device(args.rank)

    # Initialize model
    log("|  Loading model...")
    model = get_model(corpus.vocab, args)
    model.to(args.device)

    args.total_param = count_param(model)
    if hasattr(model, 'layer_pool'):
        args.layer_param = sum(
            [count_param(layer) for layer in model.layer_pool])
    elif hasattr(model, 'layer'):
        args.layer_param = count_param(model.layer)

    string = f"|  Model:\n{model}\n"
    string += f"|  Total parameters: {args.total_param}\n"
    string += f"|  Parameters without embedding and pre-softmax linear: {args.layer_param}"
    log(string)
    log.train_add_text('arguments', string)
    log.valid_add_text('arguments', string)

    # Create optimizer and scheduler.
    optimizer, scheduler = get_optimizer_scheduler(model, args)

    if args.fp16:
        print("|  Floating point 16 precision setting:\n", end='')
        model, optimizer = amp.initialize(model, optimizer, opt_level='O2')
    if args.dist:
        model = DistributedDataParallel(model,
                                        device_ids=[i],
                                        find_unused_parameters=True)

    resume_step = 0
    resume_epoch = 0
    if args.checkpoint is not None:
        log("|  Loading checkpoint...")
        if args.fp16:
            resume_step, resume_epoch = load_checkpoint(
                args.checkpoint, args.device, model, optimizer, scheduler, amp)
        else:
            resume_step, resume_epoch = load_checkpoint(
                args.checkpoint, args.device, model, optimizer, scheduler)

        def update_dropout(module):
            if hasattr(module, 'dropout'):
                model.dropout = args.dropout
            if hasattr(module, 'attn_dropout'):
                model.attn_dropout = args.attn_dropout

        model.apply(update_dropout)
    else:
        model.apply(reset_parameters)  # Initialize parameters

    # Get DataLoader
    log("|  Processing data...")
    train_loader = get_loader(corpus.train, corpus.vocab, args)
    if args.valid is not None:
        valid_loader = get_eval_loader(corpus.valid, corpus.vocab, args)

    log(f"|  Training on {socket.gethostname()} with rank {args.rank}.", True)

    def train(step, epoch, best_loss):
        model.train()
        optimizer.zero_grad()

        train_loader.dataset.set_seed(epoch)
        log.init_epoch(step, epoch, train_loader.dataset.total_target)
        epoch_loss = 0
        epoch_num_target = 0
        for batch_num, batch in enumerate(train_loader):
            # TODO debug
            f = batch['feature'].data.numpy()
            t = batch['target'].data.numpy()
            n = batch['num_target']
            vocab = corpus.vocab
            # TODO print out data to test
            # feat = np.transpose(f)
            # for data in feat:
            #     print(vocab.to_text(data))
            # continue
            # TODO test dataloading

            num_target = sum(batch['num_target'])
            epoch_num_target += num_target
            log.num_target += num_target
            log.batch_size += len(batch['num_target'])
            try:
                feature = batch['feature'].to(args.device)
                target = batch['target'].to(args.device)

                assert (target != vocab.pad_idx
                        ).sum() == num_target  # TODO remove debug check

                loss = model(feature, target)
                assert loss.dtype == torch.float32  # TODO remove debug check
                batch_loss = loss.item()
                epoch_loss += batch_loss
                log.loss += batch_loss

                loss = loss / num_target
                loss = loss / args.step_freq

                if args.fp16:
                    with amp.scale_loss(loss, optimizer) as scaled_loss:
                        scaled_loss.backward()
                else:
                    loss.backward()
            except RuntimeError as e:
                if 'out of memory' in str(e):
                    log.oom += 1
                    print(
                        f"== Rank {args.rank}: Training out of memory. Skipping this batch. =="
                    )
                    # Release memory
                    if 'scaled_loss' in locals():
                        del scaled_loss
                    if 'loss' in locals():
                        del loss
                    if 'feature' in locals():
                        del feature
                    if 'target' in locals():
                        del target
                    for param in model.parameters():
                        if param.grad is not None:
                            param.grad = None
                    if args.cuda:
                        torch.cuda.empty_cache()
                else:
                    raise e

            if (batch_num + 1) % args.step_freq == 0:
                step, epoch, best_loss = update(step, epoch, best_loss)
                if args.max_step is not None and step >= args.max_step:
                    break
        # Remaining batches that doesn't fit in update freq.
        if not args.trim_step and (batch_num + 1) % args.step_freq != 0:
            step, epoch, best_loss = update(step, epoch, best_loss)
        log.end_epoch(step, epoch)
        return step, epoch_loss / epoch_num_target, best_loss

    def update(step, epoch, best_loss):
        loss_scale = 1
        if args.fp16:
            loss_scale = amp._amp_state.loss_scalers[0]._loss_scale

        # Calculate norm of gradients. For logging.
        if args.log_norm:
            for name, param in model.named_parameters():
                if param.grad is None:
                    continue
                norm = param.grad.data.float().norm().item() / loss_scale
                log.train_add_scalar('norm/' + name, norm, step)

        # Clip gradient
        if args.fp16:
            norm = torch.nn.utils.clip_grad_norm_(amp.master_params(optimizer),
                                                  args.clip_norm)
        else:
            norm = torch.nn.utils.clip_grad_norm_(model.parameters(),
                                                  args.clip_norm)
        log.norm += norm
        log.clip_norm += min(args.clip_norm, norm)

        optimizer.step()
        optimizer.zero_grad()

        step += 1
        if scheduler is not None:
            if step < args.warmup_step:
                # Linear warmup
                warmup_lr = args.lr * step / args.warmup_step
                optimizer.param_groups[0]['lr'] = warmup_lr
            else:
                scheduler.step()

        lr = optimizer.param_groups[0]['lr']
        log.train(step, lr, loss_scale)

        if args.step_per_save != 0 and step % args.step_per_save == 0:
            if i == 0:
                path = os.path.join(args.checkpoint_dir,
                                    f'checkpoint-{epoch}-{step}.pt')
                save_checkpoint(path, step, epoch, model, optimizer, scheduler,
                                amp if args.fp16 else None)
                copyfile(
                    path,
                    os.path.join(args.checkpoint_dir, 'checkpoint_last.pt'))
            if args.dist:
                dist.barrier()

        if args.step_per_valid != 0 and step % args.step_per_valid == 0:
            # Eval on validation data.
            if args.valid is not None:
                best_loss = validate(best_loss)
        return step, epoch, best_loss

    def evaluate():
        model.eval()
        total_loss = 0
        total_target = 0
        total = valid_loader.dataset.total_target
        if i == 0:
            progress = tqdm(desc="Evaluating", total=total, unit=' token')
        for batch in valid_loader:
            # TODO debug
            f = batch['feature'].data.numpy()
            t = batch['target'].data.numpy()
            n = batch['num_target']
            vocab = corpus.vocab
            # TODO print out data to test
            # feat = np.transpose(f)
            # for data in feat:
            #     print(vocab.to_text(data))
            # continue
            # TODO test dataloading

            num_target = sum(batch['num_target'])
            total_target += num_target

            feature = batch['feature'].to(args.device)
            target = batch['target'].to(args.device)
            loss = model(feature, target)

            total_loss += loss.item()
            if i == 0:
                progress.update(num_target)
        if i == 0:
            progress.close()
        return total_loss / total_target

    def validate(best_loss):
        with torch.no_grad():
            loss = evaluate()
        log.valid(loss, step, epoch)
        if i == 0 and best_loss > loss:
            best_loss = loss
            best_path = os.path.join(args.checkpoint_dir, 'checkpoint_best.pt')
            save_checkpoint(best_path, step, epoch, model, optimizer,
                            scheduler, amp if args.fp16 else None)
        if args.dist:
            dist.barrier()

        log.valid_add_scalar('best loss', best_loss / math.log(2), step)
        log.valid_add_scalar('best ppl', 2**(best_loss / math.log(2)), step)
        return best_loss

    step = resume_step
    best_loss = math.inf
    # Start from epoch 1 or resume from next epoch
    for epoch in itertools.count(resume_epoch + 1):
        # Train on training data.
        step, loss, best_loss = train(step, epoch, best_loss)
        if args.max_step is not None and step >= args.max_step:
            break

        if args.epoch_per_valid != 0 and epoch % args.epoch_per_valid == 0:
            # Eval on validation data.
            if args.valid is not None:
                if args.dist:
                    dist.barrier()
                best_loss = validate(best_loss)

        # Saving checkpoint.
        if args.epoch_per_save != 0 and epoch % args.epoch_per_save == 0:
            if i == 0:
                path = os.path.join(args.checkpoint_dir,
                                    f'checkpoint-{epoch}-{step}.pt')
                save_checkpoint(path, step, epoch, model, optimizer, scheduler,
                                amp if args.fp16 else None)
                copyfile(
                    path,
                    os.path.join(args.checkpoint_dir, 'checkpoint_last.pt'))
            if args.dist:
                dist.barrier()

        # Delete old checkpoints.
        if i == 0 and (args.keep_step is not None
                       or args.keep_epoch is not None):
            for filename in os.listdir(args.checkpoint_dir):
                if re.match(r'checkpoint-\d+-\d+\.pt', filename):
                    file_epoch, file_step = re.split(r'[-.]', filename)[1:3]
                    if args.keep_step is not None and int(file_step) <= (
                            step - args.keep_step):
                        os.remove(os.path.join(args.checkpoint_dir, filename))
                    if args.keep_epoch is not None and int(file_epoch) <= (
                            epoch - args.keep_epoch):
                        os.remove(os.path.join(args.checkpoint_dir, filename))
        if args.dist:
            dist.barrier()

        if args.max_epoch is not None and epoch >= args.max_epoch:
            break
Esempio n. 30
0
File: main.py Progetto: EEEGUI/mmp
from utils.config import Config
from utils.model import LGBM, XDeepfm
from utils.utils import *
import pandas as pd
import warnings
from feature_engineer import feature_engineer_sparse_matrix
import gc
import os
import sys
from utils.log import Logger
sys.stdout = Logger("log.txt", sys.stdout)

warnings.filterwarnings('ignore', category=Warning)


def train(train_feature, test_feature, label, load_data):
    config = Config
    if load_data:
        train_feature = pd.read_hdf(config.TRAIN_FEATURE_PATH, key='data')
        test_feature = pd.read_hdf(config.TEST_FEATURE_PATH, key='data')
        label = pd.read_hdf(config.LABEL_PATH, key='data')
    # config.CATEGORY_VARIABLES = [c for c in train_feature.columns if (c not in config.TRUE_NUMERICAL_COLUMNS) & (c.split('_')[0] not in ['cateasnum'])]
    config.CATEGORY_VARIABLES = 'auto'
    print('%d features are used for training...' % (train_feature.shape[1]))
    if config.MODEL == 'lgbm':
        model = LGBM(config, train_feature, label, test_feature)
    else:
        model = XDeepfm(config, train_feature, label, test_feature)
    model.k_fold_train()
    # model.train()