Пример #1
0
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
Пример #2
0
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 += '*'
Пример #3
0
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()
Пример #4
0
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)
Пример #5
0
 def collect_data(self):
     DataHandler.collect_data(self)