class OfflineLearning(): def __init__(self, data_set_size=-1): self.data_set_size = data_set_size self.dh = DataHandler( data_path='/media/cem/ROSDATA/ros_data/features/csv/') self.dh.collect_data(self.data_set_size) def get_best_fit(self, n_try, test_size): best_trials = [] for a in self.dh.actions: trials = [] for i in range(n_try): a.split_train_test(test_size) a.scale_dataset() a.offline_train() print a.get_regression_score(), a.gmm.score(a.y_test) trials.append( Trial(a, a.get_regression_score(), a.gmm.score(a.y_test))) # print trials trials.sort(key=lambda t: t.cluster_score, reverse=True) best_trials.append(trials[0]) return best_trials
import numpy as np from data_handler import DataHandler import pyprind import pprint dh = DataHandler(data_path='/Volumes/ROSDATA/ros_data/features/test_data/') dh.collect_data() a = dh.actions[0] a.load_models() pp = pprint.PrettyPrinter(indent=2) clusters = {} errs = [] for s in a.samples: obj = s.obj x = a.object_scaler.transform(s.X.reshape(1, -1)).flatten() y = a.effect_scaler.transform(s.y.reshape(1, -1)).flatten()[0:3] y_predicted = a.nn.predict(x.reshape(1, -1)).flatten() err = np.linalg.norm(y_predicted - y) errs.append(err) obj_name = obj.name obj_pos = str(obj.pose) obj_id = obj.id if obj_id in dh.dropped: obj_pos += '*'
class OnlineLearning(): def __init__(self, data_set_size=-1): self.data_set_size = data_set_size self.dh = DataHandler() self.dh.collect_data(self.data_set_size) def train(self): for a in self.dh.actions: a.split_train_test(0.01) a.scale_dataset() print a.name, len(a.X_train), len(a.X_test) bar = pyprind.ProgBar(len(a.X_train), track_time=False, title='Training %s...' % (a.name)) for i in range(len(a.X_train)): x = a.X_train[i] y = a.y_train_p[i] a.nn.fit(x.reshape(1, -1), y.reshape(1, -1), verbose=0, batch_size=1, epochs=10) e_min_distance = a.effect_som.get_min_distance(y) if e_min_distance == -1 or e_min_distance >= 0.08: a.effect_som.add_neuron(y) else: a.effect_som.update(y) bar.update() pp = pprint.PrettyPrinter(indent=2) clusters = {} for i in range(len(a.X_test)): x = a.X_test[i] y = a.y_test_p[i] obj = a.test_samples[i].obj y_predicted = a.nn.predict(x.reshape(1, -1)).flatten() err = np.linalg.norm(y - y_predicted) obj_name = obj.name obj_pos = str(obj.pose) obj_id = obj.id if obj_id in self.dh.dropped: obj_pos += '*' if err > 0.05: obj_pos += 'H' cid = a.effect_som.winner(y_predicted) if cid in clusters: objs = clusters[cid] if obj_name in objs: objs[obj_name].append(obj_pos) else: objs[obj_name] = [obj_pos] else: clusters[cid] = {obj_name: [obj_pos]} print "Object:", obj.id print "Error:", err print "Cluster:", cid print "============================" pp.pprint(clusters) print "#neurons:", len(a.effect_som.weights) a.save_models()
import pickle from sklearn.preprocessing import minmax_scale from data_handler import DataHandler import numpy as np import math dh = DataHandler(data_path='/media/cem/ROSDATA/ros_data/features/csv/') dh.collect_data(-1) for a in dh.actions: gd = pickle.load(open('/home/cem/learning/models/%s_gradient_descent' % (a.name),'rb')) a.split_train_test(1) print gd.get_rmse(a.X_test,a.y_test)
def collect_data(self): DataHandler.collect_data(self)