SupervisedDeepDocNADE
SupervisedDeepDocNADE copied to clipboard
A Deep and Autoregressive Approach for Topic Modeling of Multimodal Data, TPAMI, http://arxiv.org/abs/1409.3970
Copyright 2015 Yin Zheng, Yu-Jin Zhang, Hugo Larochelle. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS SOFTWARE IS PROVIDED BY Yin Zheng, Yu-Jin Zhang, Hugo Larochelle ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
Yin Zheng, Yu-Jin Zhang, Hugo Larochelle OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the
authors and should not be interpreted as representing official policies, either expressed
or implied, of Yin Zheng, Yu-Jin Zhang, Hugo Larochelle.
''' @reference: A Deep and Autoregressive Approach for Topic Modeling of Multimodal Data, IEEE Trans. Pattern Analysis and Machine Intelligence (PAMI)
Project page: https://sites.google.com/site/zhengyin1126/home/supdeepdocnade
@Authors: Yin Zheng, Received Ph.D from Tsinghua University, 2015. Homepage: https://sites.google.com/site/zhengyin1126/ Yu-Jin Zhang, Tsinghua University, Hugo Larochelle, University of Sherbrooke and Twitter. Homepage: http://www.dmi.usherb.ca/~larocheh/index_en.html
@contact: Yin Zheng, [email protected]
'''
We provide:
- SupDeepDocNADE.py : Classes of DeepDocNADE and SupDeepDocNADE, which is used by run_pretrain_DeepDocNADE.py and run_SupDeepDocNADE.py
- run_pretrain_DeepDocNADE.py : Python script to pretrain DeepDocNADE model on MIR Flickr Unlabeled data
- run_SupDeepDocNADE.py : Python script to train and test SupDeepDocNADE mdoel.
- gen_dataset_labeled.py: Python script to generate the labeled dateset files needed by the model
- gen_dataset_unlabeled.py: Python script to generate the unlabeled dateset files needed by the model
- MIR_Flickr_Theano_lab.py: Python script to load labeled dataset and provide interface to SupDeepDocNADE model
- MIR_Flickr_Theano_Unlab.py: Python script to load unlabeled dataset and provide interface to DeepDocNADE model
=====================================================================================================================
-
Install liblinear (http://www.csie.ntu.edu.tw/~cjlin/liblinear/) and put liblinear into the PYTHONPATH NOTE: make sure that you can use liblinear in python. To test whether you config liblinear successfully, you could use "from liblinearutil import *" in python.
-
Generate the dataset:
-
Download the dataset from Nitsh's homepage: http://www.cs.toronto.edu/~nitish/multimodal/index.html
-
Run "python gen_dataset_labeled.py" to generate the labeled dataset. a) Read the comments in the script about how to use it. b) create a file IN THE SAME PATH OF THE LABELED DATASET named "meta.txt" with the following lines in the meta.txt voc_size:2000 n_regions:14 text_voc_size:2000 global_feat_size:1857 n_classes:38 c) Create a file IN THE SAME PATH OF THE LABELED DATASET named "sizes.txt" with the following content: 10000 5000 10000
-
Run "python gen_dataset_unlabeled.py" to generate the unlabeled dataset. a) Read the comments in the script about how to use it. b) create a file IN THE SAME PATH OF THE UNLABELED DATASET with the name meta.txt, the content is: voc_size:2000 n_regions:14 text_voc_size:2000 global_feat_size:1857 dataset_split:50 c) create a file IN THE SAME PATH OF THE UNLABELED DATASET named "sizes.txt" with the following content: 975000
-
-
Run run_pretrain_DeepDocNADE.py to pretrain DeepDocNADE model on unlabeled data: python run_pretrain_DeepDocNADE.py n_pretrain pre_learning_rate hidden_size activation_function dropout_rate model_file_dir unlab_dataset_dir batch_size anno_weight polyakexp_weight model_init
The parameters of the script is as follows:
n_pretrain : number of iterations pre_learning_rate : learning rate of the pretraining hidden_size : the hidden size of the model, e.g. 2048_2048_2048 is a 3 hidden layers model with 2048 units each layer activation_function : the activation function of the hidden layers, "sigmoid, relu or tanh" dropout_rate: the dropout rate for each hidden layer, e.g. "0.5_0.5_0.5" means dropout rate is 0.5 for each layer model_file_dir: path to save the pretrained model unlab_dataset_dir: the path to the unlabeled dataset batch_size: the batch size anno_weight: annotation weight polyakexp_weight: polyak weight model_init: path to the saved pretrain model, which is used to continue_training based on the trained model. It could be NULL if no model saved before.One example of the scipt is: python run_pretrain_DeepDocNADE.py 6000 0.03 2048_2048_2048 reclin 0.5_0.5_0.5 PATH_TO_SAVE_THE_MODEL PATH_TO_UNLABELED_DATA 500 12000 std 0.9995 PATH_TO_SAVED_MODEL
-
Run run_SupDeepDocNADE.py to train SupDeepDocNADE model on labeled data, which could be trained from scratch or initialize from pretrained model on unlabeled data : python run_SupDeepDocNADE.py folder_ID use_pretrain max_iter look_ahead hidden_size learning_rate unsup_weight activation_function Linear_minC, Linear_maxC, dropout_rate uniresult_dir Pretrain_model_name lab_dataset_dir batch_size anno_weight polyakexp_weight
The parameters are as follows: folder_ID : ID of the dataset ( 1 to 5 ) use_pretrain: Whether use pretrained model or training from randomly initialized parameters (True or False) max_iter: number of max iterations look_ahead: early stop if number of iterations without improvement exceed the number of look ahead hidden_size: the hidden size of the model, e.g. 2048_2048_2048 is a 3 hidden layers model with 2048 units each layer learning_rate: learning rate of training process unsup_weight: the weight of the unsupervised part activation_function: the activation function of the hidden layers, "sigmoid, relu or tanh" Linear_minC: the minimum value of C for linear SVM (in log_2 space) Linear_maxC: the max value of C for linear SVM (in log_2 space) dropout_rate: the dropout rate for each hidden layer, e.g. "0.5_0.5_0.5" means dropout rate is 0.5 for each layer uniresult_dir: the path to save the results Pretrain_model_name: the path and the name of the pretrained model if you set use_pretrain True. Otherwise, any string lab_dataset_dir: the path to the labeled dataset batch_size : the mini-batch size anno_weight: the weight of the annotation words polyakexp_weight: polyak weight
One example of the script is:
python run_SupDeepDocNADE.py 1 True 20000 300 2048_2048_2048 0.01 0.25 reclin -17 10 0.5_0.5_0.5 PATH_TO_SAVE_RESULTS PATH_NAME_OF_PRETRAINED_MODEL PATH_TO_LABELED_DATA 500 12000 0.9995