Referenced paper : RMDL: Random Multimodel Deep Learning for Classification
Referenced paper : An Improvement of Data Classification Using Random Multimodel Deep Learning (RMDL)
A new ensemble, deep learning approach for classification. Deep learning models have achieved state-of-the-art results across many domains. RMDL solves the problem of finding the best deep learning structure and architecture while simultaneously improving robustness and accuracy through ensembles of deep learning architectures. RDML can accept as input a variety data to include text, video, images, and symbolic.
Random Multimodel Deep Learning (RDML) architecture for classification. RMDL includes 3 Random models, oneDNN classifier at left, one Deep CNN classifier at middle, and one Deep RNN classifier at right (each unit could be LSTMor GRU).
There are pip and git for RMDL installation:
pip install RMDL
git clone --recursive https://github.com/kk7nc/RMDL.git
The primary requirements for this package are Python 3 with Tensorflow. The requirements.txt file contains a listing of the required Python packages; to install all requirements, run the following:
pip -r install requirements.txt
Or
pip3 install -r requirements.txt
Or:
conda install --file requirements.txt
The exponential growth in the number of complex datasets every year requires more enhancement in machine learning methods to provide robust and accurate data classification. Lately, deep learning approaches have been achieved surpassing results in comparison to previous machine learning algorithms on tasks such as image classification, natural language processing, face recognition, and etc. The success of these deep learning algorithms relys on their capacity to model complex and non-linear relationships within data. However, finding the suitable structure for these models has been a challenge for researchers. This paper introduces Random Multimodel Deep Learning (RMDL): a new ensemble, deep learning approach for classification. RMDL solves the problem of finding the best deep learning structure and architecture while simultaneously improving robustness and accuracy through ensembles of deep learning architectures. In short, RMDL trains multiple models of Deep Neural Network (DNN), Convolutional Neural Network (CNN) and Recurrent Neural Network (RNN) in parallel and combines their results to produce better result of any of those models individually. To create these models, each deep learning model has been constructed in a random fashion regarding the number of layers and nodes in their neural network structure. The resulting RDML model can be used for various domains such as text, video, images, and symbolic. In this Project, we describe RMDL model in depth and show the results for image and text classification as well as face recognition. For image classification, we compared our model with some of the available baselines using MNIST and CIFAR-10 datasets. Similarly, we used four datasets namely, WOS, Reuters, IMDB, and 20newsgroup and compared our results with available baselines. Web of Science (WOS) has been collected by authors and consists of three sets~(small, medium and large set). Lastly, we used ORL dataset to compare the performance of our approach with other face recognition methods. These test results show that RDML model consistently outperform standard methods over a broad range of data types and classification problems.
The Database of Faces (The Olivetti Faces Dataset)
from RMDL import RMDL_Text
Text_Classification(x_train, y_train, x_test, y_test, batch_size=128,
EMBEDDING_DIM=50,MAX_SEQUENCE_LENGTH = 500, MAX_NB_WORDS = 75000,
GloVe_dir="", GloVe_file = "glove.6B.50d.txt",
sparse_categorical=True, random_deep=[3, 3, 3], epochs=[500, 500, 500], plot=True,
min_hidden_layer_dnn=1, max_hidden_layer_dnn=8, min_nodes_dnn=128, max_nodes_dnn=1024,
min_hidden_layer_rnn=1, max_hidden_layer_rnn=5, min_nodes_rnn=32, max_nodes_rnn=128,
min_hidden_layer_cnn=3, max_hidden_layer_cnn=10, min_nodes_cnn=128, max_nodes_cnn=512,
random_state=42, random_optimizor=True, dropout=0.05):
from RMDL import RMDL_Image
Image_Classification(x_train, y_train, x_test, y_test, shape, batch_size=128,
sparse_categorical=True, random_deep=[3, 3, 3], epochs=[500, 500, 500], plot=True,
min_hidden_layer_dnn=1, max_hidden_layer_dnn=8, min_nodes_dnn=128, max_nodes_dnn=1024,
min_hidden_layer_rnn=1, max_hidden_layer_rnn=5, min_nodes_rnn=32, max_nodes_rnn=128,
min_hidden_layer_cnn=3, max_hidden_layer_cnn=10, min_nodes_cnn=128, max_nodes_cnn=512,
random_state=42, random_optimizor=True, dropout=0.05)
from keras.datasets import mnist
import numpy as np
from RMDL import RMDL_Image as RMDL
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train_D = X_train.reshape(X_train.shape[0], 28, 28, 1).astype('float32')
X_test_D = X_test.reshape(X_test.shape[0], 28, 28, 1).astype('float32')
X_train = X_train_D / 255.0
X_test = X_test_D / 255.0
number_of_classes = np.unique(y_train).shape[0]
shape = (28, 28, 1)
batch_size = 128
sparse_categorical = 0
n_epochs = [100, 100, 100] ## DNN-RNN-CNN
Random_Deep = [3, 3, 3] ## DNN-RNN-CNN
RMDL.Image_Classification(X_train, y_train, X_test, y_test,shape,
batch_size=batch_size,
sparse_categorical=True,
random_deep=Random_Deep,
epochs=n_epochs)
import sys
import os
from RMDL import text_feature_extraction as txt
from keras.datasets import imdb
import numpy as np
from RMDL import RMDL_Text as RMDL
print("Load IMDB dataset....")
(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=MAX_NB_WORDS)
print(len(X_train))
print(y_test)
word_index = imdb.get_word_index()
index_word = {v: k for k, v in word_index.items()}
X_train = [txt.text_cleaner(' '.join(index_word.get(w) for w in x)) for x in X_train]
X_test = [txt.text_cleaner(' '.join(index_word.get(w) for w in x)) for x in X_test]
X_train = np.array(X_train)
X_train = np.array(X_train).ravel()
print(X_train.shape)
X_test = np.array(X_test)
X_test = np.array(X_test).ravel()
batch_size = 100
sparse_categorical = 0
n_epochs = [100, 100, 100] ## DNN--RNN-CNN
Random_Deep = [3, 3, 3] ## DNN--RNN-CNN
RMDL.Text_Classification(X_train, y_train, X_test, y_test,
batch_size=batch_size,
sparse_categorical=sparse_categorical,
random_deep=Random_Deep,
epochs=n_epochs)
from RMDL import text_feature_extraction as txt
from sklearn.model_selection import train_test_split
from RMDL.Download import Download_WOS as WOS
import numpy as np
from RMDL import RMDL_Text as RMDL
path_WOS = WOS.download_and_extract()
fname = os.path.join(path_WOS,"WebOfScience/WOS11967/X.txt")
fnamek = os.path.join(path_WOS,"WebOfScience/WOS11967/Y.txt")
with open(fname, encoding="utf-8") as f:
content = f.readlines()
content = [txt.text_cleaner(x) for x in content]
with open(fnamek) as fk:
contentk = fk.readlines()
contentk = [x.strip() for x in contentk]
Label = np.matrix(contentk, dtype=int)
Label = np.transpose(Label)
np.random.seed(7)
print(Label.shape)
X_train, X_test, y_train, y_test = train_test_split(content, Label, test_size=0.2, random_state=4)
batch_size = 100
sparse_categorical = 0
n_epochs = [5000, 500, 500] ## DNN--RNN-CNN
Random_Deep = [3, 3, 3] ## DNN--RNN-CNN
RMDL.Text_Classification(X_train, y_train, X_test, y_test,
batch_size=batch_size,
sparse_categorical=True,
random_deep=Random_Deep,
epochs=n_epochs,no_of_classes=12)
import sys
import os
import nltk
nltk.download("reuters")
from nltk.corpus import reuters
from sklearn.preprocessing import MultiLabelBinarizer
import numpy as np
from RMDL import RMDL_Text as RMDL
documents = reuters.fileids()
train_docs_id = list(filter(lambda doc: doc.startswith("train"),
documents))
test_docs_id = list(filter(lambda doc: doc.startswith("test"),
documents))
X_train = [(reuters.raw(doc_id)) for doc_id in train_docs_id]
X_test = [(reuters.raw(doc_id)) for doc_id in test_docs_id]
mlb = MultiLabelBinarizer()
y_train = mlb.fit_transform([reuters.categories(doc_id)
for doc_id in train_docs_id])
y_test = mlb.transform([reuters.categories(doc_id)
for doc_id in test_docs_id])
y_train = np.argmax(y_train, axis=1)
y_test = np.argmax(y_test, axis=1)
batch_size = 100
sparse_categorical = 0
n_epochs = [20, 500, 50] ## DNN--RNN-CNN
Random_Deep = [3, 0, 0] ## DNN--RNN-CNN
RMDL.Text_Classification(X_train, y_train, X_test, y_test,
batch_size=batch_size,
sparse_categorical=True,
random_deep=Random_Deep,
epochs=n_epochs)
from sklearn.datasets import fetch_olivetti_faces
from sklearn.model_selection import train_test_split
from RMDL import RMDL_Image as RMDL
number_of_classes = 40
shape = (64, 64, 1)
data = fetch_olivetti_faces()
X_train, X_test, y_train, y_test = train_test_split(data.data,
data.target, stratify=data.target, test_size=40)
X_train = X_train.reshape(X_train.shape[0], 64, 64, 1).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 64, 64, 1).astype('float32')
batch_size = 100
sparse_categorical = 0
n_epochs = [500, 500, 50] ## DNN--RNN-CNN
Random_Deep = [0, 0, 1] ## DNN--RNN-CNN
RMDL.Image_Classification(X_train, y_train, X_test, y_test,
shape,
random_optimizor=False,
batch_size=batch_size,
random_deep=Random_Deep,
epochs=n_epochs)
More Example link
Send an email to [email protected]
@inproceedings{Kowsari2018RMDL, author = {Kowsari, Kamran and Heidarysafa, Mojtaba and Brown, Donald E. and Meimandi, Kiana Jafari and Barnes, Laura E.}, title = {RMDL: Random Multimodel Deep Learning for Classification}, booktitle = {Proceedings of the 2Nd International Conference on Information System and Data Mining}, series = {ICISDM '18}, year = {2018}, isbn = {978-1-4503-6354-9}, location = {Lakeland, FL, USA}, pages = {19--28}, numpages = {10}, url = {http://doi.acm.org/10.1145/3206098.3206111}, doi = {10.1145/3206098.3206111}, acmid = {3206111}, publisher = {ACM}, address = {New York, NY, USA}, keywords = {Data Mining, Deep Learning, Deep Neural Networks, Image Classification, Supervised Learning, Text Classification}, }
and
@article{Heidarysafa2018RMDL, title={An Improvement of Data Classification Using Random Multimodel Deep Learning (RMDL)}, author={Heidarysafa, Mojtaba and Kowsari, Kamran and Brown, Donald E. and Jafari Meimandi, Kiana and Barnes, Laura E.}, booktitle={International Journal of Machine Learning and Computing (IJMLC)}, year={2018}, Volume={8}, Number={4}, pages={298--310}, DOI={https://doi.org/10.18178/ijmlc.2018.8.4.703} }