secs = int(train_time % 60) print('training error: ' + str(mins) + 'm ' + str(secs) + 's') start_time = time.time() auc, rmse = get_err_bat(test_file) test_time = time.time() - start_time mins = int(test_time / 60) secs = int(test_time % 60) log_p( 'Test Err:' + str(i) + '\t' + str(auc) + '\t' + str(rmse)) print( 'test error: ' + str(mins) + 'm ' + str(secs) + 's') #stop training when no improvement for a while if auc>min_err: best_w1=w1t best_w2=w2t best_w3=w3t best_b1=b1t best_b2=b2t best_b3=b3t min_err=auc min_err_epoch=i if times_reduce<3: times_reduce+=1 else: times_reduce-=1 if times_reduce<0: break log_p( 'Minimal test error is '+ str( min_err)+' , at EPOCH ' + str(min_err_epoch)) ut.save_weights("mlp3fm_train_"+advertiser+".p",get_pred(train_file,best_w1,best_w2,best_w3,best_b1,best_b2,best_b3)) ut.save_weights("mlp3fm_test_"+advertiser+".p",get_pred(test_file,best_w1,best_w2,best_w3,best_b1,best_b2,best_b3))
secs = int(train_time % 60) print 'training error: ' + str(mins) + 'm ' + str(secs) + 's' start_time = time.time() auc, rmse = get_err_bat(test_file) test_time = time.time() - start_time mins = int(test_time / 60) secs = int(test_time % 60) ut.log_p( 'Test Err:' + str(i) + '\t' + str(auc) + '\t' + str(rmse)) print 'test error: ' + str(mins) + 'm ' + str(secs) + 's' #stop training when no improvement for a while if auc>min_err: best_w1=w1t best_w2=w2t best_w3=w3t best_b1=b1t best_b2=b2t best_b3=b3t min_err=auc min_err_epoch=i if times_reduce<3: times_reduce+=1 else: times_reduce-=1 if times_reduce<0: break ut.log_p( 'Minimal test error is '+ str( min_err)+' , at EPOCH ' + str(min_err_epoch)) ut.save_weights("mlp3fm_train_"+advertiser+".p",get_pred(train_file,best_w1,best_w2,best_w3,best_b1,best_b2,best_b3)) ut.save_weights("mlp3fm_test_"+advertiser+".p",get_pred(test_file,best_w1,best_w2,best_w3,best_b1,best_b2,best_b3))
clk = data[0] pclk = pred(data[1])[0] y.append(clk) yp.append(pclk) fi.close() auc = roc_auc_score(y, yp) rmse = math.sqrt(mean_squared_error(y, yp)) print '%d\t%.8f\t%.8f\t%dm%ds' % (round, auc, rmse, train_min, train_sec) fo.write('%d\t%.8f\t%.8f\t%dm%ds\n' % (round, auc, rmse, train_min, train_sec)) fo.flush() if overfitting and auc < best_auc: print 'rewriting ' + trainlog_file + ' into ' + traindl_file rewrite_train_test(trainlog_file, traindl_file) print 'rewriting ' + testlog_file + ' into ' + testdl_file rewrite_train_test(testlog_file, testdl_file) print 'output model into ' + model_file output_model(model_file) break # stop training when overfitting two rounds already if auc > best_auc: best_auc = auc best_w=w best_v=v best_w_0=w_0 overfitting = False else: overfitting = True ut.save_weights("fm_train_"+advertiser+".p",pred_all(train_file,best_w,best_v,best_w_0)) ut.save_weights("fm_test_"+advertiser+".p",pred_all(test_file,best_w,best_v,best_w_0)) fo.close()