def validate(self, type): '''Handles validation set data''' input_eval_path = os.path.join(self.dirs['eval_path'], "inputs") vel_eval_path = os.path.join(self.dirs['eval_path'], "velocities") c_input_eval_path = os.path.join(input_eval_path, "classical") c_vel_eval_path = os.path.join(vel_eval_path, "classical") j_input_eval_path = os.path.join(input_eval_path, "jazz") j_vel_eval_path = os.path.join(vel_eval_path, "jazz") if type == "classical": input_folder = os.listdir(c_input_eval_path) file_count = len(input_folder) vel_eval_path = c_vel_eval_path input_eval_path = c_input_eval_path else: input_folder = os.listdir(j_input_eval_path) file_count = len(input_folder) vel_eval_path = j_vel_eval_path input_eval_path = j_input_eval_path #CLASSICS in_list = [] out_list = [] filenames = [] for i, filename in enumerate(input_folder): if filename.split('.')[-1] == 'npy': vel_path = os.path.join(vel_eval_path, filename) input_path = os.path.join(input_eval_path, filename) true_vel = np.load(vel_path) / 127 loaded = np.load(input_path) if not self.one_hot: loaded = loaded / 2 in_list.append(loaded) out_list.append(true_vel) filenames.append(filename) valid_generator = BatchGenerator(in_list, out_list, self.batch_count, self.input_size, self.output_size, mini=False) return valid_generator
def train(self, data, model=None, starting_epoch=0, clip_grad=True, epochs=1001, input_keep_prob=0.5, output_keep_prob=0.5, learning_rate=0.001 , eval_epoch=20,val_epoch=10, save_epoch=1): self.data = data if clip_grad: jazz_optimizer = self.clip_optimizer(learning_rate,self.jazz_loss) classical_optimizer = self.clip_optimizer(learning_rate,self.classical_loss) else: jazz_optimizer = tf.train.AdamOptimizer(learning_rate).minimize(self.jazz_loss) classical_optimizer = tf.train.AdamOptimizer(learning_rate).minimize(self.classical_loss) self.sess = tf.Session() self.c_in_list, self.c_out_list,self.c_input_lens, self.c_files = self.eval_set('classical') self.j_in_list, self.j_out_list,self.j_input_lens, self.j_files = self.eval_set('jazz') if model: self.load(model) else: self.sess.run(tf.global_variables_initializer()) self.summary_op = tf.summary.merge_all() self.train_writer = tf.summary.FileWriter(os.path.join(self.dirs['logs_path'], 'train'), graph=self.sess.graph_def) self.test_writer = tf.summary.FileWriter(os.path.join(self.dirs['logs_path'], 'test'), graph=self.sess.graph_def) classical_batcher = BatchGenerator(self.data["classical"]["X"], self.data["classical"]["Y"], self.batch_count, self.input_size, self.output_size, mini=self.mini) jazz_batcher = BatchGenerator(self.data["jazz"]["X"], self.data["jazz"]["Y"], self.batch_count, self.input_size, self.output_size, mini=self.mini) self.v_classical_batcher = self.validate("classical") self.v_classical_batcher = self.v_classical_batcher.batch() self.v_jazz_batcher = self.validate("jazz") self.v_jazz_batcher = self.v_jazz_batcher.batch() classical_generator = classical_batcher.batch() jazz_generator = jazz_batcher.batch() print("[*] Initiating training...") for epoch in range(starting_epoch, epochs): classical_epoch_avg = 0 jazz_epoch_avg = 0 print("[*] Epoch %d" % epoch) for batch in range(classical_batcher.batch_count): batch_X, batch_Y, batch_len = classical_generator.next() batch_len = [batch_len] * len(batch_X) epoch_error, classical_summary, _ = self.sess.run([self.classical_loss, self.summary_op, classical_optimizer, ], feed_dict={ self.inputs: batch_X, self.true_classical_outputs: batch_Y, self.true_jazz_outputs: batch_Y, self.seq_len: batch_len, self.input_keep_prob: input_keep_prob, self.output_keep_prob: output_keep_prob}) classical_epoch_avg += epoch_error print("\tBatch %d/%d, Training MSE for Classical batch: %.9f" % (batch+1, classical_batcher.batch_count, epoch_error)) self.train_writer.add_summary(classical_summary, epoch*classical_batcher.batch_count + epoch) for batch in range(jazz_batcher.batch_count): batch_X, batch_Y, batch_len = jazz_generator.next() batch_len = [batch_len] * len(batch_X) epoch_error, jazz_summary, _ = self.sess.run([self.jazz_loss, self.summary_op, jazz_optimizer, ], feed_dict={ self.inputs: batch_X, self.true_jazz_outputs: batch_Y, self.true_classical_outputs: batch_Y, self.seq_len: batch_len, self.input_keep_prob: input_keep_prob, self.output_keep_prob: output_keep_prob}) jazz_epoch_avg += epoch_error print("\tBatch %d/%d, Training MSE for Jazz batch: %.9f" % (batch+1, jazz_batcher.batch_count, epoch_error)) self.train_writer.add_summary(jazz_summary, epoch*jazz_batcher.batch_count + epoch) # self.validation(epoch) print("[*] Average Training MSE for Classical epoch %d: %.9f" % (epoch, classical_epoch_avg/classical_batcher.batch_count)) print("[*] Average Training MSE for Jazz epoch %d: %.9f" % (epoch, jazz_epoch_avg/jazz_batcher.batch_count)) if epoch % val_epoch == 0 : print("[*] Validating model...") self.validation(epoch) if epoch % save_epoch == 0 : self.save(epoch) if epoch % eval_epoch == 0 : print("[*] Evaluating model...") self.evaluate(epoch) print("[*] Training complete.")
def validate(self, type): '''Handles validation set data''' # input_eval_path = os.path.join(self.dirs['eval_path'], "inputs") # vel_eval_path = os.path.join(self.dirs['eval_path'], "velocities") # c_input_eval_path = os.path.join(input_eval_path, "classical") # c_vel_eval_path = os.path.join(vel_eval_path, "classical") # # j_input_eval_path = os.path.join(input_eval_path, "jazz") # # j_vel_eval_path = os.path.join(vel_eval_path, "jazz") # if type == "classical": # input_folder = os.listdir(c_input_eval_path) # file_count = len(input_folder) # vel_eval_path = c_vel_eval_path # input_eval_path = c_input_eval_path # else: # input_folder = os.listdir(j_input_eval_path) # file_count = len(input_folder) # vel_eval_path = j_vel_eval_path # input_eval_path = j_input_eval_path # #CLASSICS input_folder = self.dirs['eval_path'] in_list = [] out_list = [] filenames = [] input_lens = [] for i, filename in enumerate(os.listdir(input_folder)): # if filename.split('.')[-1] == 'npy': if filename.split('.')[-1] == 'mat': filepath = os.path.join(input_folder, filename) data = scipy.io.loadmat(filepath) loaded_x = data['Xin'] loaded_y = data['Yout'] assert (loaded_x.shape[0] == loaded_y.shape[0]) in_list.append(loaded_x) out_list.append(loaded_y) filenames.append(filename) input_len = [len(loaded_x)] input_lens.append(input_len) # in_list = [] # out_list = [] # filenames = [] # for i, filename in enumerate(input_folder): # if filename.split('.')[-1] == 'npy': # vel_path = os.path.join(vel_eval_path, filename) # input_path = os.path.join(input_eval_path, filename) # true_vel = np.load(vel_path)/127 # loaded = np.load(input_path) # if not self.one_hot: # loaded = loaded/2 # in_list.append(loaded) # out_list.append(true_vel) # filenames.append(filename) valid_generator = BatchGenerator(in_list, out_list, self.batch_count, self.input_size, self.output_size, mini=False) return valid_generator