Added accuracy check in regression model test.

This commit is contained in:
Hunter Nichols 2021-06-09 13:44:42 -07:00
parent 7a60eabdfe
commit ccf98ad5a6
2 changed files with 13 additions and 27 deletions

View File

@ -168,6 +168,9 @@ class regression_model(simulation):
def cross_validation(self):
"""Wrapper for sklean cross validation function for OpenRAM regression models.
Returns the mean accuracy for each model/output."""
from sklearn.model_selection import cross_val_score
untrained_model = self.get_model()
@ -179,13 +182,15 @@ class regression_model(simulation):
output_num = 0
models = {}
debug.info(1, "Output name, mean_accuracy, std_dev")
model_scores = {}
for o_name in self.output_names:
output_label = labels[:,output_num]
scores = cross_val_score(untrained_model, features, output_label, cv=5)
scores = cross_val_score(untrained_model, features, output_label, cv=10)
debug.info(1, "{}, {}, {}".format(o_name, scores.mean(), scores.std()))
model_scores[o_name] = scores.mean()
output_num+=1
return model_scores
# Fixme - only will work for sklearn regression models
def save_model(self, model_name, model):

View File

@ -30,6 +30,7 @@ class regression_model_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import linear_regression
from characterizer import neural_network
from sram import sram
from sram_config import sram_config
c = sram_config(word_size=1,
@ -49,31 +50,11 @@ class regression_model_test(openram_test):
corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0])
m = linear_regression(s.s, tempspice, corner)
m.cross_validation()
# Only compare the delays
# spice_delays = {key:value for key, value in spice_data.items() if 'delay' in key}
# spice_delays['min_period'] = spice_data['min_period']
# model_delays = {key:value for key, value in model_data.items() if 'delay' in key}
# model_delays['min_period'] = model_data['min_period']
# debug.info(1,"Spice Delays={}".format(spice_delays))
# debug.info(1,"Model Delays={}".format(model_delays))
# if OPTS.tech_name == "freepdk45":
# error_tolerance = 0.25
# elif OPTS.tech_name == "scn4m_subm":
# error_tolerance = 0.25
# else:
# self.assertTrue(False) # other techs fail
# print('spice_delays', spice_delays)
# print('model_delays', model_delays)
# # Check if no too many or too few results
# self.assertTrue(len(spice_delays.keys())==len(model_delays.keys()))
# self.assertTrue(self.check_golden_data(spice_delays,model_delays,error_tolerance))
#m = linear_regression(s.s, tempspice, corner)
m = neural_network(s.s, tempspice, corner)
scores = m.cross_validation()
accuracy_requirement = 0.75
self.assertTrue(scores['rise_delay'] >= accuracy_requirement)
globals.end_openram()