Example #1
0
def test(test_filename, time_now, title, **kwargs):
    # 超参数设置
    network_name = get_value_or_default(kwargs, 'network', default='LSTM')
    affect = get_value_or_default(kwargs, 'affect', default=30)
    filename = test_filename
    column = get_value_or_default(kwargs, 'column', default='ClPr')
    index_col = 'TrdDt'
    batch_size = 1
    plot_name = get_value_or_default(kwargs, 'plot_name', default=['fig1', ])

    # 加载数据
    data = Action.generate_df(
        filename,
        column,
        index_col,
        affect
    )
    data_loader = DataLoader(data['dataset'], batch_size=batch_size, shuffle=False)

    net = torch.load('save/{}.pt'.format(network_name))

    predict = list()
    for tx, ty in data_loader:
        output = net(tx.reshape(1, batch_size, affect))
        output = output.reshape(1).detach()
        predict.append(float(output) * data['std'] + data['mean'])

    plt1 = Plot(1, time_now, network_name)
    plt1.plot(data['index'], data['real_data'][affect:], 'real data')
    plt1.plot(data['index'], predict, 'predict data')
    plt1.title(title, zh=True)
    plt1.xylabel('Datetime', 'price')
    plt1.save(plot_name[0])
    # Plot.show()
    Plot.cla()

    evaluator = Evaluate(title, data['real_data'][affect:], predict)

    logger = Logger('test.log')
    basic_info = 'tested {}.'.format(network_name)
    logger.set_log(basic_info,
                   t=time_now,
                   filename=filename,
                   column=column,
                   affect_days=affect,
                   network=net,
                   plot_name=plot_name,
                   MSELoss=evaluator.MSELoss(),
                   DA=evaluator.DA(),
                   Theil=evaluator.Theil_U(),
                   L1Loss=evaluator.L1Loss(),
                   Customize=evaluator.customize(),
                   title=title,
                   MAPE=evaluator.MAPE(),
                   R=evaluator.R()
                   )
    f_out = open('log/{}.txt'.format(title), 'w')
    print('{} = {}'.format('time', time_now),
          '{} = {}'.format('MSELoss', evaluator.MSELoss()),
          '{} = {}'.format('DA', evaluator.DA()),
          '{} = {}'.format('Theil_U', evaluator.Theil_U()),
          '{} = {}'.format('L1Loss', evaluator.L1Loss()),
          '{} = {}'.format('MAPE', evaluator.MAPE()),
          '{} = {}'.format('R', evaluator.R()),
          file=f_out,
          sep='\n')
    f_out.close()
    return evaluator
Example #2
0
        loss.backward()
        optimizer.step()

    predict = list()

    for tx, ty in data_loader_test:
        output = net(tx.reshape(1, 1, AFFECT))
        output = output.reshape(1).detach()
        if STANDARDIZE:
            predict.append(
                float(output) * data_test['std'] + data_test['mean'])
        else:
            predict.append(float(output))
    if (step + 1) % 100 == 0:
        evaluator = Evaluate(data_test['real_data'][AFFECT:], predict)
        da_list.append(evaluator.DA())
        mse_list.append(evaluator.MSELoss())
        theil_list.append(evaluator.Theil_U())
        l1_list.append(evaluator.L1Loss())
        mape_list.append(evaluator.MAPE())
        r_list.append(evaluator.R())

    print('step: {}, data accuracy: {}'.format(step + 1, 1 - loss.detach()))

    if (step + 1) % 1000 == 0:
        plt.cla()
        zh_font = fm.FontProperties(fname='font/simhei.ttf')
        plt.plot(data_test['index'],
                 data_test['real_data'][AFFECT:],
                 label='real data')
        plt.plot(data_test['index'], predict, label='predict data')