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)
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()
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 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)
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)
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)
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):