class LyricGenRunner: def __init__(self, model_load_path, artist_name, test, prime_text): self.sess = tf.Session() self.artist_name = artist_name print 'Process data...' self.data_reader = DataReader(self.artist_name) self.vocab = self.data_reader.get_vocab() print 'Init model...' self.model = LSTMModel(self.sess, self.vocab, c.BATCH_SIZE, c.SEQ_LEN, c.CELL_SIZE, c.NUM_LAYERS, test=test) print 'Init variables...' self.saver = tf.train.Saver(max_to_keep=None) self.sess.run(tf.initialize_all_variables()) if model_load_path is not None: self.saver.restore(self.sess, model_load_path) print 'Model restored from ' + model_load_path if test: self.test(prime_text) else: self.train() def train(self): while True: inputs, targets = self.data_reader.get_train_batch( c.BATCH_SIZE, c.SEQ_LEN) print 'Training model...' feed_dict = { self.model.inputs: inputs, self.model.targets: targets } global_step, loss, _ = self.sess.run( [self.model.global_step, self.model.loss, self.model.train_op], feed_dict=feed_dict) print 'Step: %d | loss: %f' % (global_step, loss) if global_step % c.MODEL_SAVE_FREQ == 0: print 'Saving model...' self.saver.save(self.sess, join(c.MODEL_SAVE_DIR, self.artist_name + '.ckpt'), global_step=global_step) def test(self, prime_text): sample = self.model.generate(prime=prime_text) print sample
class LyricGenRunner: def __init__(self, model_load_path, artist_name, test, prime_text): """ Initializes the Lyric Generation Runner. @param model_load_path: The path from which to load a previously-saved model. Default = None. @param artist_name: The name of the artist on which to train. (Used to grab data). Default = 'kanye_west' @param test: Whether to test or train the model. Testing generates a sequence from the provided model and artist. Default = False. @param prime_text: The text with which to start the test sequence. """ self.sess = tf.Session() self.artist_name = artist_name print 'Process data...' self.data_reader = DataReader(self.artist_name) self.vocab = self.data_reader.get_vocab() print 'Init model...' self.model = LSTMModel(self.sess, self.vocab, c.BATCH_SIZE, c.SEQ_LEN, c.CELL_SIZE, c.NUM_LAYERS, test=test) print 'Init variables...' self.saver = tf.train.Saver(max_to_keep=None) self.sess.run(tf.global_variables_initializer()) # if load path specified, load a saved model if model_load_path is not None: self.saver.restore(self.sess, model_load_path) print 'Model restored from ' + model_load_path if test: self.test(prime_text) else: self.train() def train(self): """ Runs a training loop on the model. """ keep_training = True while keep_training: inputs, targets = self.data_reader.get_train_batch( c.BATCH_SIZE, c.SEQ_LEN) print 'Training model...' feed_dict = { self.model.inputs: inputs, self.model.targets: targets } global_step, loss, _ = self.sess.run( [self.model.global_step, self.model.loss, self.model.train_op], feed_dict=feed_dict) if global_step == c.MAX_STEPS: keep_training = False print 'Step: %d | loss: %f' % (global_step, loss) if global_step % c.MODEL_SAVE_FREQ == 0 or not keep_training: print 'Saving model...' self.saver.save(self.sess, join(c.MODEL_SAVE_DIR, self.artist_name + '.ckpt'), global_step=global_step) def test(self, prime_text): """ Generates a text sequence. """ # generate and save sample sequence sample = self.model.generate(prime=prime_text, num_out=200).replace( '.', '.\n').replace(',', ',\n ') print sample
class LyricsGenerator(): def __init__(self, model_name='model', test=False): self.session = tf.Session() print('Process data...') self.data_reader = DataReader() self.vocab = self.data_reader.get_vocab() print('Init model...') self.model = Model(self.session, self.vocab, c.BATCH_SIZE, c.SEQ_LEN, c.CELL_SIZE, c.NUM_LAYERS, test) print('Init variables...') self.test = test self.saver = tf.train.Saver(max_to_keep=None) self.session.run(tf.global_variables_initializer()) self.model_name = model_name def train(self): """Runs a training loop on the model. """ while True: inputs, targets = self.data_reader.get_train_batch( c.BATCH_SIZE, c.SEQ_LEN) print('Training model...') feed_dict = { self.model.inputs: inputs, self.model.targets: targets } global_step, loss, _ = self.session.run( [self.model.global_step, self.model.loss, self.model.train_op], feed_dict=feed_dict) print('Step: %d | loss: %f' % (global_step, loss)) if global_step % c.MODEL_SAVE_FREQ == 0: print('Saving model...') model_path = '{}{}.ckpt'.format(c.MODEL_SAVE_DIR, self.model_name) self.saver.save(self.session, model_path, global_step=global_step) def generate(self): """Generate the lyrics """ return self.model.generate() def run(self): # if self.test and self._load_saved_model(): if self.test: return self.generate() else: return self.train() def _load_saved_model(self): print("model loading ...") ok = True try: model_path = '{}{}.ckpt-{}'.format(c.MODEL_SAVE_DIR, self.model_name, c.MODEL_SAVE_FREQ) self.saver.restore(self.session, model_path) except ValueError: ok = False print("Done!") return ok
class LyricGenRunner: def __init__(self, model_load_path, artist_name, test, prime_text): """ Initializes the Lyric Generation Runner. @param model_load_path: The path from which to load a previously-saved model. Default = None. @param artist_name: The name of the artist on which to train. (Used to grab data). Default = 'kanye_west' @param test: Whether to test or train the model. Testing generates a sequence from the provided model and artist. Default = False. @param prime_text: The text with which to start the test sequence. """ self.sess = tf.Session() self.artist_name = artist_name print('Process data...') #Py3Upgrade self.data_reader = DataReader(self.artist_name) self.vocab = self.data_reader.get_vocab() print('Init model...') #Py3Upgrade self.model = LSTMModel(self.sess, self.vocab, c.BATCH_SIZE, c.SEQ_LEN, c.CELL_SIZE, c.NUM_LAYERS, test=test) print('Init variables...') #Py3Upgrade self.saver = tf.train.Saver(max_to_keep=None) self.sess.run(tf.global_variables_initializer()) # if load path specified, load a saved model if model_load_path is not None: self.saver.restore(self.sess, model_load_path) print('Model restored from ', model_load_path) #Py3Upgrade if test: self.test(prime_text) else: self.train() def train(self): """ Runs a training loop on the model. """ for i in range( 30000): #changed from True while loop to 30,000 for loop inputs, targets = self.data_reader.get_train_batch( c.BATCH_SIZE, c.SEQ_LEN) print('Training model...') #Py3Upgrade feed_dict = { self.model.inputs: inputs, self.model.targets: targets } global_step, loss, _ = self.sess.run( [self.model.global_step, self.model.loss, self.model.train_op], feed_dict=feed_dict) print('Step: %d | loss: %f' % (global_step, loss)) #Py3Upgrade if global_step % c.MODEL_SAVE_FREQ == 0: print('Saving model...') #Py3Upgrade self.saver.save(self.sess, join(c.MODEL_SAVE_DIR, self.artist_name + '.ckpt'), global_step=global_step) def test(self, prime_text): """ Generates a text sequence. """ # generate and save sample sequence sample = self.model.generate(prime=prime_text) print(sample) #Py3Upgrade # save sample as txt file f = open("../save/outputs/dirty/" + self.artist_name + ".txt", "w+") f.write(sample) f.close()