def predict(self, X, results_file): ret = LinearModel.predict(self, X) pred = self._sigmoid(ret) fp = open(results_file, 'w') for v in pred.flat: print >> fp, v fp.close()
def main(): print("main started") samples, labels = load_trainingset() # Build a model using a class, and after the compilation we'll start the training model = LinearModel("my_model") model.compile_model() model.training(samples, labels) # Evaluate a sample using the model print(model.predict([30.0])) print("main finish")
class Driver(object): ''' A driver object for the SCRC ''' def __init__(self, args): '''Constructor''' self.parser = msgParser.MsgParser() self.state = carState.CarState() self.control = carControl.CarControl() self.state_size = 20 self.action_size = 3 self.model = LinearModel(args.replay_size, self.state_size, self.action_size) self.enable_training = args.enable_training self.enable_exploration = args.enable_exploration self.show_sensors = args.show_sensors self.exploration_decay_steps = args.exploration_decay_steps self.exploration_rate_start = args.exploration_rate_start self.exploration_rate_end = args.exploration_rate_end from wheel import Wheel self.wheel = Wheel(args.joystick_nr, args.autocenter, args.gain, args.min_level, args.max_level, args.min_force) self.steer_lock = 0.785398 self.max_speed = 100 #from plotlinear import PlotLinear #self.plot = PlotLinear(self.model, ['Speed', 'Angle', 'TrackPos'], ['Steer', 'Accel', 'Brake']) if self.show_sensors: from sensorstats import Stats self.stats = Stats(inevery=8) self.reset() def init(self): '''Return init string with rangefinder angles''' self.angles = [0 for x in range(19)] for i in range(5): self.angles[i] = -90 + i * 15 self.angles[18 - i] = 90 - i * 15 for i in range(5, 9): self.angles[i] = -20 + (i-5) * 5 self.angles[18 - i] = 20 - (i-5) * 5 return self.parser.stringify({'init': self.angles}) def getState(self): #state = np.array(self.state.getTrack()) state = np.array(self.state.getTrack() + [self.state.getSpeedX()]) assert state.shape == (self.state_size,) return state def getTerminal(self): return np.all(np.array(self.state.getTrack()) == -1) def getEpsilon(self): # calculate decaying exploration rate if self.total_train_steps < self.exploration_decay_steps: return self.exploration_rate_start - self.total_train_steps * (self.exploration_rate_start - self.exploration_rate_end) / self.exploration_decay_steps else: return self.exploration_rate_end def drive(self, msg): # parse incoming message self.state.setFromMsg(msg) # by default predict all controls by model state = self.getState() steer, accel, brake = self.model.predict(state) self.control.setSteer(max(-1, min(1, steer))) self.control.setAccel(max(0, min(1, accel))) #self.control.setBrake(max(0, min(1, brake))) # if not out of track turn the wheel according to model terminal = self.getTerminal() events = self.wheel.getEvents() for event in events: if self.wheel.isButtonDown(event, 0) or self.wheel.isButtonDown(event, 8): self.control.setGear(-1) elif self.wheel.isButtonDown(event, 1) or self.wheel.isButtonDown(event, 9): self.control.setGear(1) if self.control.getGear() >= 0: self.gear() # replace random exploration with user assistance epsilon = self.getEpsilon() # show sensors if self.show_sensors: self.state.botcontrol = 1 - epsilon self.state.mancontrol = (self.control.getGear() == -1) self.stats.update(self.state) print "epsilon: ", epsilon, "\treplay: ", self.model.count if (self.enable_training and terminal) or self.control.getGear() == -1 or (self.enable_exploration and random.random() < epsilon): if terminal or self.control.getGear() == -1: self.wheel.resetForce() self.control.setSteer(self.wheel.getWheel()) self.control.setAccel(self.wheel.getAccel()) self.control.setBrake(self.wheel.getBrake()) if self.enable_training and not terminal and self.control.getGear() != -1: action = (self.control.getSteer(), self.control.getAccel(), self.control.getBrake()) self.model.add(state, action) self.model.train() #self.plot.update() else: if terminal: self.steer() self.speed() else: steer = self.control.getSteer() assert -1 <= steer <= 1 wheel = self.wheel.getWheel() #print "steer:", steer, "wheel:", wheel self.wheel.generateForce(steer - wheel) self.total_train_steps += 1 return self.control.toMsg() def steer(self): angle = self.state.angle dist = self.state.trackPos self.control.setSteer((angle - dist*0.5)/self.steer_lock) def speed(self): speed = self.state.getSpeedX() accel = self.control.getAccel() if speed < self.max_speed: print "speed < max_speed", speed, self.max_speed accel += 0.1 if accel > 1: accel = 1.0 else: print "speed >= max_speed", speed, self.max_speed accel -= 0.1 if accel < 0: accel = 0.0 self.control.setAccel(accel) def gear(self): ''' rpm = self.state.getRpm() gear = self.state.getGear() if rpm > 7000: gear += 1 ''' speed = self.state.getSpeedX() gear = self.state.getGear() if speed < 25: gear = 1 elif 30 < speed < 55: gear = 2 elif 60 < speed < 85: gear = 3 elif 90 < speed < 115: gear = 4 elif 120 < speed < 145: gear = 5 elif speed > 150: gear = 6 self.control.setGear(gear) def onShutDown(self): pass def onRestart(self): self.episode += 1 print "Episode", self.episode def reset(self): self.wheel.resetForce() self.enable_training = True self.total_train_steps = 0 self.model.reset() self.episode = 0 self.onRestart() def test_mode(self): self.total_train_steps = self.exploration_decay_steps self.enable_training = False
def predict(self, X): ret = LinearModel.predict(self, X) return self._sigmoid(ret)
def predict(self, X, results_file): pred = LinearModel.predict(self, X) fp = open(results_file, 'w') for v in pred.flat: print >> fp, v fp.close()
from model_evaluation import r_squared data = pd.read_csv("boston_house_price.txt", sep='|') data = data[["LSTAT", "RM", "PTRATIO", "INDUS", "MEDV"]].values data = (data - np.min(data)) / (np.max(data) - np.min(data)) N = data.shape[0] RSQ = [] for step in range(1): np.random.shuffle(data) train = data[:int(N * 0.7), :] test = data[int(N * 0.7):, :] X_train = train[:, :-1] Y_train = train[:, [-1]] X_test = test[:, :-1] Y_test = test[:, [-1]] n_feat = X_train.shape[1] model = LinearModel(n_feat) model.training(X_train, Y_train, alpha=1.0, eps=0.001) hatY_train = model.predict(X_train) hatY_test = model.predict(X_test) r1 = r_squared(Y_train, hatY_train) r2 = r_squared(Y_test, hatY_test) print(r1, r2) sys.stdout.flush()
class Driver(object): ''' A driver object for the SCRC ''' def __init__(self, args): '''Constructor''' self.parser = msgParser.MsgParser() self.state = carState.CarState() self.control = carControl.CarControl() self.state_size = 20 self.action_size = 3 self.model = LinearModel(args.replay_size, self.state_size, self.action_size) self.enable_training = args.enable_training self.enable_exploration = args.enable_exploration self.show_sensors = args.show_sensors self.exploration_decay_steps = args.exploration_decay_steps self.exploration_rate_start = args.exploration_rate_start self.exploration_rate_end = args.exploration_rate_end from wheel import Wheel self.wheel = Wheel(args.joystick_nr, args.autocenter, args.gain, args.min_level, args.max_level, args.min_force) self.steer_lock = 0.785398 self.max_speed = 100 #from plotlinear import PlotLinear #self.plot = PlotLinear(self.model, ['Speed', 'Angle', 'TrackPos'], ['Steer', 'Accel', 'Brake']) if self.show_sensors: from sensorstats import Stats self.stats = Stats(inevery=8) self.reset() def init(self): '''Return init string with rangefinder angles''' self.angles = [0 for x in range(19)] for i in range(5): self.angles[i] = -90 + i * 15 self.angles[18 - i] = 90 - i * 15 for i in range(5, 9): self.angles[i] = -20 + (i - 5) * 5 self.angles[18 - i] = 20 - (i - 5) * 5 return self.parser.stringify({'init': self.angles}) def getState(self): #state = np.array(self.state.getTrack()) state = np.array(self.state.getTrack() + [self.state.getSpeedX()]) assert state.shape == (self.state_size, ) return state def getTerminal(self): return np.all(np.array(self.state.getTrack()) == -1) def getEpsilon(self): # calculate decaying exploration rate if self.total_train_steps < self.exploration_decay_steps: return self.exploration_rate_start - self.total_train_steps * ( self.exploration_rate_start - self.exploration_rate_end) / self.exploration_decay_steps else: return self.exploration_rate_end def drive(self, msg): # parse incoming message self.state.setFromMsg(msg) # by default predict all controls by model state = self.getState() steer, accel, brake = self.model.predict(state) self.control.setSteer(max(-1, min(1, steer))) self.control.setAccel(max(0, min(1, accel))) #self.control.setBrake(max(0, min(1, brake))) # if not out of track turn the wheel according to model terminal = self.getTerminal() events = self.wheel.getEvents() for event in events: if self.wheel.isButtonDown(event, 0) or self.wheel.isButtonDown( event, 8): self.control.setGear(-1) elif self.wheel.isButtonDown(event, 1) or self.wheel.isButtonDown( event, 9): self.control.setGear(1) if self.control.getGear() >= 0: self.gear() # replace random exploration with user assistance epsilon = self.getEpsilon() # show sensors if self.show_sensors: self.state.botcontrol = 1 - epsilon self.state.mancontrol = (self.control.getGear() == -1) self.stats.update(self.state) print "epsilon: ", epsilon, "\treplay: ", self.model.count if (self.enable_training and terminal) or self.control.getGear() == -1 or ( self.enable_exploration and random.random() < epsilon): if terminal or self.control.getGear() == -1: self.wheel.resetForce() self.control.setSteer(self.wheel.getWheel()) self.control.setAccel(self.wheel.getAccel()) self.control.setBrake(self.wheel.getBrake()) if self.enable_training and not terminal and self.control.getGear( ) != -1: action = (self.control.getSteer(), self.control.getAccel(), self.control.getBrake()) self.model.add(state, action) self.model.train() #self.plot.update() else: if terminal: self.steer() self.speed() else: steer = self.control.getSteer() assert -1 <= steer <= 1 wheel = self.wheel.getWheel() #print "steer:", steer, "wheel:", wheel self.wheel.generateForce(steer - wheel) self.total_train_steps += 1 return self.control.toMsg() def steer(self): angle = self.state.angle dist = self.state.trackPos self.control.setSteer((angle - dist * 0.5) / self.steer_lock) def speed(self): speed = self.state.getSpeedX() accel = self.control.getAccel() if speed < self.max_speed: print "speed < max_speed", speed, self.max_speed accel += 0.1 if accel > 1: accel = 1.0 else: print "speed >= max_speed", speed, self.max_speed accel -= 0.1 if accel < 0: accel = 0.0 self.control.setAccel(accel) def gear(self): ''' rpm = self.state.getRpm() gear = self.state.getGear() if rpm > 7000: gear += 1 ''' speed = self.state.getSpeedX() gear = self.state.getGear() if speed < 25: gear = 1 elif 30 < speed < 55: gear = 2 elif 60 < speed < 85: gear = 3 elif 90 < speed < 115: gear = 4 elif 120 < speed < 145: gear = 5 elif speed > 150: gear = 6 self.control.setGear(gear) def onShutDown(self): pass def onRestart(self): self.episode += 1 print "Episode", self.episode def reset(self): self.wheel.resetForce() self.enable_training = True self.total_train_steps = 0 self.model.reset() self.episode = 0 self.onRestart() def test_mode(self): self.total_train_steps = self.exploration_decay_steps self.enable_training = False
class Driver(object): ''' A driver object for the SCRC ''' def __init__(self, args): '''Constructor''' self.WARM_UP = 0 self.QUALIFYING = 1 self.RACE = 2 self.UNKNOWN = 3 self.stage = args.stage self.parser = msgParser.MsgParser() self.state = carState.CarState() self.control = carControl.CarControl() self.state_size = 3 self.action_size = 3 self.model = LinearModel(args.replay_size, self.state_size, self.action_size) self.steer_lock = 0.785398 self.max_speed = 100 self.enable_training = args.enable_training self.enable_exploration = args.enable_exploration self.show_sensors = args.show_sensors self.total_train_steps = 0 self.exploration_decay_steps = args.exploration_decay_steps self.exploration_rate_start = args.exploration_rate_start self.exploration_rate_end = args.exploration_rate_end self.episode = 0 self.onRestart() #from plotlinear import PlotLinear #self.plot = PlotLinear(self.model, ['Speed', 'Angle', 'TrackPos'], ['Steer', 'Accel', 'Brake']) if self.show_sensors: from sensorstats import Stats self.stats = Stats(inevery=8) def init(self): '''Return init string with rangefinder angles''' self.angles = [0 for x in range(19)] for i in range(5): self.angles[i] = -90 + i * 15 self.angles[18 - i] = 90 - i * 15 for i in range(5, 9): self.angles[i] = -20 + (i - 5) * 5 self.angles[18 - i] = 20 - (i - 5) * 5 return self.parser.stringify({'init': self.angles}) def getState(self): state = np.array([ self.state.getSpeedX(), self.state.getAngle(), self.state.getTrackPos() ]) assert state.shape == (self.state_size, ) return state def getTerminal(self): return np.all(np.array(self.state.getTrack()) == -1) def getEpsilon(self): # calculate decaying exploration rate if self.total_train_steps < self.exploration_decay_steps: return self.exploration_rate_start - self.total_train_steps * ( self.exploration_rate_start - self.exploration_rate_end) / self.exploration_decay_steps else: return self.exploration_rate_end def drive(self, msg): # parse incoming message self.state.setFromMsg(msg) # show sensors if self.show_sensors: self.stats.update(self.state) # during exploration use hard-coded algorithm state = self.getState() terminal = self.getTerminal() epsilon = self.getEpsilon() print "epsilon: ", epsilon, "\treplay: ", self.model.count if terminal or (self.enable_exploration and random.random() < epsilon): self.steer() self.speed() self.gear() if self.enable_training: action = (self.control.getSteer(), self.control.getAccel(), self.control.getBrake()) self.model.add(state, action) self.model.train() #self.plot.update() else: steer, accel, brake = self.model.predict(state) #print "steer:", steer, "accel:", accel, "brake:", brake self.control.setSteer(steer) self.control.setAccel(accel) self.control.setBrake(brake) self.gear() self.total_train_steps += 1 return self.control.toMsg() def steer(self): angle = self.state.angle dist = self.state.trackPos self.control.setSteer((angle - dist * 0.5) / self.steer_lock) def gear(self): rpm = self.state.getRpm() gear = self.state.getGear() if self.prev_rpm == None: up = True else: if (self.prev_rpm - rpm) < 0: up = True else: up = False if up and rpm > 7000: gear += 1 if not up and rpm < 3000: gear -= 1 ''' speed = self.state.getSpeedX() if speed < 30: gear = 1 elif speed < 60: gear = 2 elif speed < 90: gear = 3 elif speed < 120: gear = 4 elif speed < 150: gear = 5 else: gear = 6 ''' self.control.setGear(gear) def speed(self): speed = self.state.getSpeedX() accel = self.control.getAccel() if speed < self.max_speed: accel += 0.1 if accel > 1: accel = 1.0 else: accel -= 0.1 if accel < 0: accel = 0.0 self.control.setAccel(accel) def onShutDown(self): pass def onRestart(self): self.prev_rpm = None self.episode += 1 print "Episode", self.episode
class Driver(object): ''' A driver object for the SCRC ''' def __init__(self, args): '''Constructor''' self.parser = msgParser.MsgParser() self.state = carState.CarState() self.control = carControl.CarControl() assert args.load_weights is not None, "Use --load_weights" self.state_fields = args.state_fields self.state_size = len(self.state_fields) self.action_size = 3 self.model = LinearModel(args.replay_size, self.state_size, self.action_size) self.model.load(args.load_weights) self.episode = 0 self.onRestart() self.show_sensors = args.show_sensors if self.show_sensors: from sensorstats import Stats self.stats = Stats(inevery=8) def init(self): '''Return init string with rangefinder angles''' self.angles = [0 for x in range(19)] for i in range(5): self.angles[i] = -90 + i * 15 self.angles[18 - i] = 90 - i * 15 for i in range(5, 9): self.angles[i] = -20 + (i-5) * 5 self.angles[18 - i] = 20 - (i-5) * 5 return self.parser.stringify({'init': self.angles}) def drive(self, msg): # parse incoming message self.state.setFromMsg(msg) # show sensors if self.show_sensors: self.stats.update(self.state) state = np.array(sum(self.state.sensors.itervalues(), []), dtype=np.float) state = state[self.state_fields] #state = self.state.getTrack() #state = [self.state.getAngle(), self.state.getSpeedX(), self.state.getTrackPos()] steer, accel, brake = self.model.predict(state) self.control.setSteer(steer) self.control.setAccel(accel) #self.control.setBrake(brake) self.gear() return self.control.toMsg() def gear(self): ''' rpm = self.state.getRpm() gear = self.state.getGear() if rpm > 7000: gear += 1 ''' speed = self.state.getSpeedX() gear = self.state.getGear() if speed < 25: gear = 1 elif 30 < speed < 55: gear = 2 elif 60 < speed < 85: gear = 3 elif 90 < speed < 115: gear = 4 elif 120 < speed < 145: gear = 5 elif speed > 150: gear = 6 self.control.setGear(gear) def onShutDown(self): pass def onRestart(self): self.episode += 1 print "Episode", self.episode
class Driver(object): ''' A driver object for the SCRC ''' def __init__(self, args): '''Constructor''' self.WARM_UP = 0 self.QUALIFYING = 1 self.RACE = 2 self.UNKNOWN = 3 self.stage = args.stage self.parser = msgParser.MsgParser() self.state = carState.CarState() self.control = carControl.CarControl() self.state_size = 3 self.action_size = 3 self.model = LinearModel(args.replay_size, self.state_size, self.action_size) self.steer_lock = 0.785398 self.max_speed = 100 self.enable_training = args.enable_training self.enable_exploration = args.enable_exploration self.show_sensors = args.show_sensors self.total_train_steps = 0 self.exploration_decay_steps = args.exploration_decay_steps self.exploration_rate_start = args.exploration_rate_start self.exploration_rate_end = args.exploration_rate_end self.episode = 0 self.onRestart() #from plotlinear import PlotLinear #self.plot = PlotLinear(self.model, ['Speed', 'Angle', 'TrackPos'], ['Steer', 'Accel', 'Brake']) if self.show_sensors: from sensorstats import Stats self.stats = Stats(inevery=8) def init(self): '''Return init string with rangefinder angles''' self.angles = [0 for x in range(19)] for i in range(5): self.angles[i] = -90 + i * 15 self.angles[18 - i] = 90 - i * 15 for i in range(5, 9): self.angles[i] = -20 + (i-5) * 5 self.angles[18 - i] = 20 - (i-5) * 5 return self.parser.stringify({'init': self.angles}) def getState(self): state = np.array([self.state.getSpeedX(), self.state.getAngle(), self.state.getTrackPos()]) assert state.shape == (self.state_size,) return state def getTerminal(self): return np.all(np.array(self.state.getTrack()) == -1) def getEpsilon(self): # calculate decaying exploration rate if self.total_train_steps < self.exploration_decay_steps: return self.exploration_rate_start - self.total_train_steps * (self.exploration_rate_start - self.exploration_rate_end) / self.exploration_decay_steps else: return self.exploration_rate_end def drive(self, msg): # parse incoming message self.state.setFromMsg(msg) # show sensors if self.show_sensors: self.stats.update(self.state) # during exploration use hard-coded algorithm state = self.getState() terminal = self.getTerminal() epsilon = self.getEpsilon() print "epsilon: ", epsilon, "\treplay: ", self.model.count if terminal or (self.enable_exploration and random.random() < epsilon): self.steer() self.speed() self.gear() if self.enable_training: action = (self.control.getSteer(), self.control.getAccel(), self.control.getBrake()) self.model.add(state, action) self.model.train() #self.plot.update() else: steer, accel, brake = self.model.predict(state) #print "steer:", steer, "accel:", accel, "brake:", brake self.control.setSteer(steer) self.control.setAccel(accel) self.control.setBrake(brake) self.gear() self.total_train_steps += 1 return self.control.toMsg() def steer(self): angle = self.state.angle dist = self.state.trackPos self.control.setSteer((angle - dist*0.5)/self.steer_lock) def gear(self): rpm = self.state.getRpm() gear = self.state.getGear() if self.prev_rpm == None: up = True else: if (self.prev_rpm - rpm) < 0: up = True else: up = False if up and rpm > 7000: gear += 1 if not up and rpm < 3000: gear -= 1 ''' speed = self.state.getSpeedX() if speed < 30: gear = 1 elif speed < 60: gear = 2 elif speed < 90: gear = 3 elif speed < 120: gear = 4 elif speed < 150: gear = 5 else: gear = 6 ''' self.control.setGear(gear) def speed(self): speed = self.state.getSpeedX() accel = self.control.getAccel() if speed < self.max_speed: accel += 0.1 if accel > 1: accel = 1.0 else: accel -= 0.1 if accel < 0: accel = 0.0 self.control.setAccel(accel) def onShutDown(self): pass def onRestart(self): self.prev_rpm = None self.episode += 1 print "Episode", self.episode