Example #1
0
def test_mlp(X, Y):
    dbn_network: UnsupervisedDBN = UnsupervisedDBN.load(DBN_NETWORK_FILENAME)
    mlp_network: MLPClassifier = joblib.load(MLP_NETWORK_FILENAME)
    first_positions = dbn_network.transform(X[:, 0])
    second_positions = dbn_network.transform(X[:, 1])
    X = np.concatenate((first_positions, second_positions), axis=1)
    return mlp_network.score(X, Y)
Example #2
0
def predict_mlp(first, second):
    First = np.array(first)
    Second = np.array(second)
    dbn_network: UnsupervisedDBN = UnsupervisedDBN.load(DBN_NETWORK_FILENAME)
    mlp_network: MLPClassifier = joblib.load(MLP_NETWORK_FILENAME)
    first_position = dbn_network.transform(First)
    second_position = dbn_network.transform(Second)
    X = np.concatenate((first_position, second_position))
    result = mlp_network.predict(X.reshape(1, -1))
    return result.flatten().tolist()
Example #3
0
 def __init__(self, load=False):
     if load:
         self.bands = pickle.load(open("bands.pickle", "rb"))
         self.dbn = UnsupervisedDBN.load("dbn.pickle")
         self.prepca = pickle.load(open("prepca.pickle", "rb"))
         self.pca = pickle.load(open("pca.pickle", "rb"))
     else:
         self.dbn = UnsupervisedDBN(hidden_layers_structure=[50, 50, 50],
                                    batch_size=1024,
                                    learning_rate_rbm=0.001,
                                    n_epochs_rbm=5,
                                    contrastive_divergence_iter=2,
                                    activation_function='sigmoid')
         self.bands = [
             {"start": 0, "end": 150, "pca_components":30, "energy_factor": 5},
             {"start": 120, "end":300, "pca_components":70, "energy_factor": 1},
             {"start": 250, "end":513, "pca_components":60, "energy_factor": 0.5}
         ]
         self.prepca = [PCA(n_components=band["pca_components"]) for band in self.bands]
         self.pca = PCA(n_components=16)
Example #4
0
def train_mlp(X, Y):
    dbn_network = UnsupervisedDBN.load(DBN_NETWORK_FILENAME)
    first_positions = dbn_network.transform(X[:, 0])
    second_positions = dbn_network.transform(X[:, 1])
    X = np.concatenate((first_positions, second_positions), axis=1)
    print(f'Shape after Concatenation = {X.shape}')

    mlp_network = MLPClassifier(hidden_layer_sizes=(90, 45, 20, 2),
                                learning_rate='constant',
                                learning_rate_init=1e-2,
                                max_iter=1000)
    mlp_network.fit(X, Y)
    joblib.dump(mlp_network, MLP_NETWORK_FILENAME)
Example #5
0
def train_dbn(X):
    dbn_network = UnsupervisedDBN(
        hidden_layers_structure=[337, 260, 170, 85, 45],
        activation_function='relu',
        learning_rate_rbm=5 * 1e-3,
        n_epochs_rbm=200)
    dbn_network.fit(X)
    dbn_network.save(DBN_NETWORK_FILENAME)
Example #6
0
class DBNFeatureExtractor(object):
    def __init__(self, load=False):
        if load:
            self.bands = pickle.load(open("bands.pickle", "rb"))
            self.dbn = UnsupervisedDBN.load("dbn.pickle")
            self.prepca = pickle.load(open("prepca.pickle", "rb"))
            self.pca = pickle.load(open("pca.pickle", "rb"))
        else:
            self.dbn = UnsupervisedDBN(hidden_layers_structure=[50, 50, 50],
                                       batch_size=1024,
                                       learning_rate_rbm=0.001,
                                       n_epochs_rbm=5,
                                       contrastive_divergence_iter=2,
                                       activation_function='sigmoid')
            self.bands = [
                {"start": 0, "end": 150, "pca_components":30, "energy_factor": 5},
                {"start": 120, "end":300, "pca_components":70, "energy_factor": 1},
                {"start": 250, "end":513, "pca_components":60, "energy_factor": 0.5}
            ]
            self.prepca = [PCA(n_components=band["pca_components"]) for band in self.bands]
            self.pca = PCA(n_components=16)
    def save(self):
        self.dbn.save("dbn.pickle")
        pickle.dump(self.bands, open("bands.pickle", "wb"))
        pickle.dump(self.prepca, open("prepca.pickle", "wb"))
        pickle.dump(self.pca, open("pca.pickle", "wb"))
    
    def normalize_energy(self, banded_frames):
        bands_energy = [band["energy_factor"] * np.sum(np.square(banded_frames[bandIndex]))/(band["end"] - band["start"]) 
                             for bandIndex, band  in enumerate(self.bands)]
        return [bf/math.sqrt(be) for bf,be in zip(banded_frames, bands_energy)]

    def train(self, frames):
        banded_frames = [self.prepca[bandIndex].fit_transform(frames[:,band["start"]:band["end"]]) 
                             for bandIndex, band  in enumerate(self.bands)]
        banded_frames = self.normalize_energy(banded_frames)
        frames = np.concatenate(banded_frames, axis=1)
        print(frames.shape)
        self.dbn.fit(frames)
        raw_features = self.dbn.transform(frames)
        self.pca.fit(raw_features)

    def extractFeatures(self, frames):
        banded_frames = [self.prepca[bandIndex].transform(frames[:,band["start"]:band["end"]]) 
                             for bandIndex, band  in enumerate(self.bands)]
        banded_frames = self.normalize_energy(banded_frames)
        frames = np.concatenate(banded_frames, axis=1)
        raw_features = self.dbn.transform(frames)
        return self.pca.transform(raw_features)
Example #7
0
if __name__ == '__main__':
    # Load the dataset
    (X_train, Y_train), (_, _) = mnist.load_data()
    X_train, Y_train = shuffle(X_train, Y_train, random_state=1000)

    width = X_train.shape[1]
    height = X_train.shape[2]

    X = X_train[0:nb_samples].reshape(
        (nb_samples, width * height)).astype(np.float32) / 255.0
    Y = Y_train[0:nb_samples]

    # Train the unsupervised DBN
    unsupervised_dbn = UnsupervisedDBN(hidden_layers_structure=[512, 256, 64],
                                       learning_rate_rbm=0.05,
                                       n_epochs_rbm=100,
                                       batch_size=64,
                                       activation_function='sigmoid')

    X_dbn = unsupervised_dbn.fit_transform(X)

    # Perform t-SNE
    tsne = TSNE(n_components=2, perplexity=20, random_state=1000)
    X_tsne = tsne.fit_transform(X_dbn)

    # Show the result
    fig, ax = plt.subplots(figsize=(18, 10))

    colors = [cm.tab10(i) for i in Y]

    for i in range(nb_samples):