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
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') plt.title('{}.png'.format(step + 1), fontproperties=zh_font) plt.savefig('fig/{}.png'.format(step + 1)) plt.cla()