Loading caption-lib/lstm/Models/coco_model.py +5 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ # ========================================================================================= from __future__ import division from lstm.configuration import current as _config import tensorflow as tf Loading Loading @@ -57,6 +58,7 @@ class coco_model(object): self.features = tf.placeholder(tf.float32, [None, self.D], name="features_placeholder_model") self.captions = tf.placeholder(tf.int32, [None, self.L], name="captions_placeholder_model") if _config.trainer.verbose: print("\n#>\t CREATE MODEL") print("#>\tdim_feature:", dim_feature) print("#>\tdim_embed", dim_embed) Loading Loading @@ -86,6 +88,7 @@ class coco_model(object): b_c = tf.get_variable('b_c', [self.H], initializer=self.const_initializer) c = tf.nn.tanh(tf.matmul(features_mean, w_c) + b_c) if _config.trainer.verbose: print("\n#>\t Initial LSTM") print("#>\t:", features_mean[0]) print("#>\tc:", c) Loading @@ -97,6 +100,7 @@ class coco_model(object): with tf.variable_scope('word_embedding', reuse=reuse): w = tf.get_variable('w', [self.V, self.M], initializer=self.emb_initializer) x = tf.nn.embedding_lookup(w, inputs, name='word_vector') # (N, T, M) or (N, M) if _config.trainer.verbose: print("\n#>\t Embedding Loopkup") print("#>\tV:", self.V) print("#>\tM:", self.M) Loading Loading @@ -188,6 +192,7 @@ class coco_model(object): alpha_list = [] lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units=self.H) if _config.trainer.verbose: print("\n#>\t Build Model") print("#>\tmask:", mask) print("#>\tbatch_normalisation:", self._batch_norm) Loading caption-lib/lstm/Trainers/coco_trainer.py +6 −3 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ class coco_trainer(object): if not os.path.exists(self.log_path): os.makedirs(self.log_path) if _config.trainer.verbose: print("\n#>\t INIT TRAINING") print("#>\ttf.Optimizer", self.optimizer) print("#>\tlearningrate", self.learning_rate) Loading @@ -85,6 +86,7 @@ class coco_trainer(object): loss = self.model.build_model() tf.get_variable_scope().reuse_variables() _, _, generated_captions = self.model.build_sampler(max_len=20) if _config.trainer.verbose: print("\n#>\t INIT LOSS") print("#>\tloss", loss) Loading @@ -95,6 +97,7 @@ class coco_trainer(object): grads = tf.gradients(loss, tf.trainable_variables()) grads_and_vars = list(zip(grads, tf.trainable_variables())) train_op = optimizer.apply_gradients(grads_and_vars=grads_and_vars) if _config.trainer.verbose: print("\n#>\t TRAIN Operation") print("#>\toptimizer\n", optimizer) # print("#>\tgradients\n", grads) Loading @@ -114,7 +117,7 @@ class coco_trainer(object): #summary_op = tf.merge_all_summaries() summary_op = tf.summary.merge_all() print("\n#>\t TRAINING") print("\n#> TRAINING") print("#>\tTotal number of epochs: %d" %self.n_epochs) print("#>\tData size: %d" %n_examples) print("#>\tBatch size: %d" %self.batch_size) Loading @@ -141,7 +144,7 @@ class coco_trainer(object): print("#>\tcaption shape:", captions.shape) print("#>\timageId shape:", image_idxs.shape) for e in range(self.n_epochs): print("#>\tEPOCH") print("#> EPOCH") rand_idxs = np.random.permutation(n_examples) m_captions = captions[rand_idxs] Loading @@ -154,7 +157,7 @@ class coco_trainer(object): image_idxs_batch = m_image_idxs[i*self.batch_size:(i+1)*self.batch_size] features_batch = m_features[i*self.batch_size:(i+1)*self.batch_size] if i % 10 == 0: print("#> Batch Shapes") print() print("#>\tBatch: " + str(i) + "\tEpoch: " + str(e) + "\tBatch size: " + str(i*self.batch_size) + " - " + str((i+1)*self.batch_size)) print("#>\tfrom Feature Batch:", features_batch.shape, features_batch[0].shape) print("#>\tfrom Captions Batch:", captions_batch.shape) Loading caption-lib/lstm/configuration.py +3 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ class default_trainer(object): num_layers = 2 num_epochs = 60 num_steps = 35 vector_size = 2048 batch_size = 20 dropout = 0.5 init_scale = 0.05 Loading Loading @@ -84,10 +85,10 @@ class current(default_reader, default_validator, default_trainer, default_paths) # e.g. validator.read_test = "/test1234" reader.reader_on = False reader.verbose = True reader.verbose = False validator.validator_on = False trainer.train_on = True trainer.verbose = True trainer.verbose = False trainer.num_epochs = 3 caption-lib/lstm/lstm_main.py +3 −3 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ def main(self, parameter_list): model = _model.coco_model( word_to_idx, current_reader, dim_feature=[20, 2048], dim_embed=2048, dim_feature=[_config.trainer.batch_size, _config.trainer.vector_size], dim_embed=_config.trainer.vector_size, dim_hidden=1024, n_time_step=16, prev2out=True, Loading @@ -55,7 +55,7 @@ def main(self, parameter_list): train_data, val_data, n_epochs=3, batch_size=20, batch_size=_config.trainer.batch_size, update_rule='adam', learning_rate=0.001, print_every=10, Loading Loading
caption-lib/lstm/Models/coco_model.py +5 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ # ========================================================================================= from __future__ import division from lstm.configuration import current as _config import tensorflow as tf Loading Loading @@ -57,6 +58,7 @@ class coco_model(object): self.features = tf.placeholder(tf.float32, [None, self.D], name="features_placeholder_model") self.captions = tf.placeholder(tf.int32, [None, self.L], name="captions_placeholder_model") if _config.trainer.verbose: print("\n#>\t CREATE MODEL") print("#>\tdim_feature:", dim_feature) print("#>\tdim_embed", dim_embed) Loading Loading @@ -86,6 +88,7 @@ class coco_model(object): b_c = tf.get_variable('b_c', [self.H], initializer=self.const_initializer) c = tf.nn.tanh(tf.matmul(features_mean, w_c) + b_c) if _config.trainer.verbose: print("\n#>\t Initial LSTM") print("#>\t:", features_mean[0]) print("#>\tc:", c) Loading @@ -97,6 +100,7 @@ class coco_model(object): with tf.variable_scope('word_embedding', reuse=reuse): w = tf.get_variable('w', [self.V, self.M], initializer=self.emb_initializer) x = tf.nn.embedding_lookup(w, inputs, name='word_vector') # (N, T, M) or (N, M) if _config.trainer.verbose: print("\n#>\t Embedding Loopkup") print("#>\tV:", self.V) print("#>\tM:", self.M) Loading Loading @@ -188,6 +192,7 @@ class coco_model(object): alpha_list = [] lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units=self.H) if _config.trainer.verbose: print("\n#>\t Build Model") print("#>\tmask:", mask) print("#>\tbatch_normalisation:", self._batch_norm) Loading
caption-lib/lstm/Trainers/coco_trainer.py +6 −3 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ class coco_trainer(object): if not os.path.exists(self.log_path): os.makedirs(self.log_path) if _config.trainer.verbose: print("\n#>\t INIT TRAINING") print("#>\ttf.Optimizer", self.optimizer) print("#>\tlearningrate", self.learning_rate) Loading @@ -85,6 +86,7 @@ class coco_trainer(object): loss = self.model.build_model() tf.get_variable_scope().reuse_variables() _, _, generated_captions = self.model.build_sampler(max_len=20) if _config.trainer.verbose: print("\n#>\t INIT LOSS") print("#>\tloss", loss) Loading @@ -95,6 +97,7 @@ class coco_trainer(object): grads = tf.gradients(loss, tf.trainable_variables()) grads_and_vars = list(zip(grads, tf.trainable_variables())) train_op = optimizer.apply_gradients(grads_and_vars=grads_and_vars) if _config.trainer.verbose: print("\n#>\t TRAIN Operation") print("#>\toptimizer\n", optimizer) # print("#>\tgradients\n", grads) Loading @@ -114,7 +117,7 @@ class coco_trainer(object): #summary_op = tf.merge_all_summaries() summary_op = tf.summary.merge_all() print("\n#>\t TRAINING") print("\n#> TRAINING") print("#>\tTotal number of epochs: %d" %self.n_epochs) print("#>\tData size: %d" %n_examples) print("#>\tBatch size: %d" %self.batch_size) Loading @@ -141,7 +144,7 @@ class coco_trainer(object): print("#>\tcaption shape:", captions.shape) print("#>\timageId shape:", image_idxs.shape) for e in range(self.n_epochs): print("#>\tEPOCH") print("#> EPOCH") rand_idxs = np.random.permutation(n_examples) m_captions = captions[rand_idxs] Loading @@ -154,7 +157,7 @@ class coco_trainer(object): image_idxs_batch = m_image_idxs[i*self.batch_size:(i+1)*self.batch_size] features_batch = m_features[i*self.batch_size:(i+1)*self.batch_size] if i % 10 == 0: print("#> Batch Shapes") print() print("#>\tBatch: " + str(i) + "\tEpoch: " + str(e) + "\tBatch size: " + str(i*self.batch_size) + " - " + str((i+1)*self.batch_size)) print("#>\tfrom Feature Batch:", features_batch.shape, features_batch[0].shape) print("#>\tfrom Captions Batch:", captions_batch.shape) Loading
caption-lib/lstm/configuration.py +3 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ class default_trainer(object): num_layers = 2 num_epochs = 60 num_steps = 35 vector_size = 2048 batch_size = 20 dropout = 0.5 init_scale = 0.05 Loading Loading @@ -84,10 +85,10 @@ class current(default_reader, default_validator, default_trainer, default_paths) # e.g. validator.read_test = "/test1234" reader.reader_on = False reader.verbose = True reader.verbose = False validator.validator_on = False trainer.train_on = True trainer.verbose = True trainer.verbose = False trainer.num_epochs = 3
caption-lib/lstm/lstm_main.py +3 −3 Original line number Diff line number Diff line Loading @@ -40,8 +40,8 @@ def main(self, parameter_list): model = _model.coco_model( word_to_idx, current_reader, dim_feature=[20, 2048], dim_embed=2048, dim_feature=[_config.trainer.batch_size, _config.trainer.vector_size], dim_embed=_config.trainer.vector_size, dim_hidden=1024, n_time_step=16, prev2out=True, Loading @@ -55,7 +55,7 @@ def main(self, parameter_list): train_data, val_data, n_epochs=3, batch_size=20, batch_size=_config.trainer.batch_size, update_rule='adam', learning_rate=0.001, print_every=10, Loading