def setup(self, bottom, top): param = eval(self.param_str) self.batch = int(param['batch']) self.batch_loader = BatchLoader(param, "train") self.ohem_batch_loader = BatchLoader(param, 'ohem') self.train_ratio = 1. self.ohem_ratio = 0 if self.ohem_batch_loader.is_loaded(): self.train_ratio = 7 / 8. self.ohem_ratio = 1. - self.train_ratio top[0].reshape(self.batch, 3, self.img_size, self.img_size) # data top[1].reshape(self.batch, 72) # landmark
def inference(self, input_): self.loader = BatchLoader( self.config.data_dir, self.config.dataset_name, self.config.batch_size, self.config.num_classes, self.config.preprocessor, self.config.epoch, self.config.specialist, self.config.forward_only) content, filename = self.loader.prepare_inference() #with tf.control_dependencies([self.loader.enqueue]): logits = self.build_model(content) softmax = tf.nn.softmax(logits) init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer()) self.sess.run(init_op) self.saver = tf.train.Saver() ckpt = tf.train.get_checkpoint_state(self.config.checkpoint_dir) if ckpt and ckpt.model_checkpoint_path: self.saver.restore(self.sess, ckpt.model_checkpoint_path) else: print('no checkpoint found...') self.sess.run(self.loader.enqueue, feed_dict={self.loader.filenames: input_}) m_logits, m_softmax, m_filename = self.sess.run( [logits, softmax, filename]) print(m_softmax, m_filename)
def setup(self, bottom, top): param = eval(self.param_str) self.batch = int(param['batch']) self.net = param['net'] self.img_size = config.NET_IMG_SIZES[self.net] self.batch_loader = BatchLoader(param, "train") self.ohem_batch_loader = BatchLoader(param, 'ohem') self.train_ratio = 1. self.ohem_ratio = 0 if self.ohem_batch_loader.is_loaded(): self.train_ratio = 7 / 8. self.ohem_ratio = 1 / 8. top[0].reshape(self.batch, 3, self.img_size, self.img_size) # data top[1].reshape(self.batch, 1) # label top[2].reshape(self.batch, 4) # bbox if self.net != 'pnet': top[3].reshape(self.batch, config.LANDMARK_SIZE * 2)
def train(args): yaml_file = yaml.safe_load(args.cfg) print(yaml.dump(yaml_file, default_flow_style=False)) cfg = TrainingConfig(yaml_file) output_dir = cfg.output if not os.path.exists(output_dir): os.makedirs(output_dir) chunks = get_all_chunks(cfg.input) print("Found {} files".format(len(chunks))) num_train_chunks = int(len(chunks) * cfg.train_ratio) training_chunks = chunks[:num_train_chunks] test_chunks = chunks[num_train_chunks:] print("Chunks Training({}) Testing({})".format(len(training_chunks), len(test_chunks))) train_loader = BatchLoader(training_chunks, cfg) test_loader = BatchLoader(test_chunks, cfg) worker = TensorWorker(cfg, train_loader, test_loader) print()
def __init__(self, batch_size=params.BATCH_SIZE, nb_epochs=params.NB_EPOCHS, mask=None, experiment_path=params.EXPERIMENT_PATH, use_adversarial_loss=params.USE_ADVERSARIAL_LOSS, lambda_decay=params.LAMBDA_DECAY, lambda_adversarial=params.LAMBDA_ADVERSARIAL, patience=params.PATIENCE, discr_whole_image=params.DISCR_WHOLE_IMAGE, discr_loss_limit=params.DISCR_LOSS_LIMIT, use_dropout=params.USE_DROPOUT): self.batch_size = batch_size self.nb_epochs = nb_epochs self.experiment_path = experiment_path self.save_path = os.path.join(self.experiment_path, "model/") self.save_best_path = os.path.join(self.experiment_path, "best_model/") self.logs_path = os.path.join(self.experiment_path, "logs") create_dir(self.save_path) create_dir(self.logs_path) self.global_step = tf.Variable(0, trainable=False, name='global_step') self.phase = tf.placeholder(tf.bool, name='phase') self.patience = patience # parameters for adversarial loss self.use_adversarial_loss = use_adversarial_loss self.lambda_adversarial = lambda_adversarial if lambda_decay: self.lambda_adversarial = 1 - tf.train.exponential_decay( .1, self.global_step, 10000, .5, staircase=True) self.discr_whole_image = discr_whole_image self.discr_loss_limit = discr_loss_limit self.num_discr_trained = tf.Variable(tf.constant(0, dtype=tf.int32), trainable=False) self.use_dropout = use_dropout self.batch_loader = BatchLoader(self.batch_size) if mask is not None: self.np_mask = mask else: self.np_mask = np.zeros((1, 64, 64, 1)) self.np_mask[:, 16:48, 16:48, :] = 1 self._sess = tf.Session() tf.summary.scalar("lambda_adversarial", self.lambda_adversarial) tf.summary.scalar("num discr trained", self.num_discr_trained)
def __init__(self, vocab_files, \ generator_file, \ batch_size=32, load_generator=True): self.batch_size = batch_size self.generator_data = None if generator_file: with open(generator_file, 'rb') as f: self.generator_data = [pkl.load(f)] self.gen_batch_loader = BatchLoader(self.generator_data, vocab_files, sentence_array=True) self.vocab_size = self.gen_batch_loader.words_vocab_size
def pretrain_generator(gen, gen_opt, epochs): global data_df n_iter = 0 loader = BatchLoader(data_df) for epoch in range(epochs): # print(f'epoch = {epoch}\n --------------------------------') total_loss = 0 n_iter += 1 for batch in tqdm(loader.load_action_batch(MAX_SEQ_LEN, BATCH_SIZE, CUDA), total=int(NUM_SAMPLES / BATCH_SIZE / MAX_SEQ_LEN)): gen_opt.zero_grad() loss = gen.batchNLLLoss(batch) loss.backward() gen_opt.step() total_loss += loss.data.item() total_loss /= NUM_SAMPLES / BATCH_SIZE / MAX_SEQ_LEN print('iteration = %d, NLL loss = %.4f' % (n_iter, total_loss))
def main(): np.random.seed(233) torch.manual_seed(233) data_loader = BatchLoader(10000) model = Seq2SeqModel(10, NUM_CLASSES, WINDOW_SIZE) trainval(model, data_loader) # Should print 'polo ' inference(model, "nor marco I", "polo ") inference(model, "marco nor I", "polo ") inference(model, "nor I marco", "polo ") # Should print ' ' inference(model, "nor I neither", " ") # More difficult task inference(model, "nor ma rco I", " ") inference(model, "ma rco nor I", " ") pass
def main(): LAMBDA = 0.0 num_class = 526 checkpoint_dir = "../model/" with tf.name_scope('input'): input_images = tf.placeholder(tf.float32, shape=(None, 100, 100, 3), name='input_images') labels = tf.placeholder(tf.int64, shape=(None), name='labels') logits, features, total_loss, accuracy, centers_update_op, center_loss, softmax_loss = build_network( input_images, labels, num_class, ratio=LAMBDA) global_step = tf.Variable(0, trainable=False, name='global_step') train_batch_loader = BatchLoader("../data/facescrub_train.list", 16) test_batch_loader = BatchLoader("../data/facescrub_val.list", 16) optimizer = tf.train.AdamOptimizer(0.001) with tf.control_dependencies([centers_update_op]): train_op = optimizer.minimize(total_loss, global_step=global_step) summary_op = tf.summary.merge_all() with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess: sess.run(tf.global_variables_initializer()) writer = tf.summary.FileWriter('../tmp/face_log', sess.graph) saver = tf.train.Saver() step = sess.run(global_step) while step <= 80000: batch_images, batch_labels = train_batch_loader.next_batch() # print batch_images.shape # print batch_labels.shape _, summary_str, train_acc, Center_loss, Softmax_loss = sess.run( [train_op, summary_op, accuracy, center_loss, softmax_loss], feed_dict={ input_images: (batch_images - 127.5) * 0.0078125, # - mean_data, labels: batch_labels, }) step += 1 print("step", step) if step % 100 == 0: print("********* Step %s: ***********" % str(step)) print("center loss: %s" % str(Center_loss)) print("softmax_loss: %s" % str(Softmax_loss)) print("train_acc: %s" % str(train_acc)) print("*******************************") if step % 10000 == 0: saver.save(sess, checkpoint_dir + 'model.ckpt', global_step=step) writer.add_summary(summary_str, global_step=step) if step % 2000 == 0: batch_images, batch_labels = test_batch_loader.next_batch() vali_image = (batch_images - 127.5) * 0.0078125 vali_acc = sess.run(accuracy, feed_dict={ input_images: vali_image, labels: batch_labels }) print(("step: {}, train_acc:{:.4f}, vali_acc:{:.4f}".format( step, train_acc, vali_acc))) sess.close()
def main(): params = args() model_prefix = params.model_prefix load_epoch = params.load_epoch batch_size = params.batch_size img1_path = params.image1 img2_path = params.image2 img_shape = params.image_shape img_dir = params.img_dir txt_path = params.file_txt # in out files file_ = open(txt_path, 'r') lines_ = file_.readlines() result_ = open("result.txt", 'w') # if Test_Img == 'True': img1 = cv2.imread(img1_path) img2 = cv2.imread(img2_path) img1 = cv2.resize(img1, (img_shape, img_shape)) img2 = cv2.resize(img2, (img_shape, img_shape)) img1 = np.expand_dims(img1, 0) img2 = np.expand_dims(img2, 0) test_batch_loader = BatchLoader("../data/facescrub_val.list", batch_size, img_shape) tf.reset_default_graph() with tf.name_scope('input'): input_images = tf.placeholder(tf.float32, shape=(batch_size, img_shape, img_shape, 3), name='input_images') labels = tf.placeholder(tf.int32, shape=(batch_size), name='labels') features, accuracy, pred_class, res1 = build_network( input_images, labels, 526, 'test') check_ckpt(model_prefix + '-' + str(load_epoch)) #detect detector = face_dect() # with tf.Session() as sess: restore_model = tf.train.Saver() #restore_model = tf.train.import_meta_graph(model_prefix+'-'+str(load_epoch) +'.meta') restore_model.restore(sess, model_prefix + '-' + str(load_epoch)) print("face model restore over") ''' all_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES) key_list = [] var_dic = dict() for v_name in tf.global_variables(): i=0 print("name : ",v_name.name[:-2],v_name.shape) print("shape",all_vars[i]) key_list.append(v_name.name[:-2]) i+=1 #print(tf.get_variable_scope()) #all_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES) vas= sess.run([all_vars]) print(len(vas)) for i in range(len(vas)): cur_name = key_list[i] cur_var = vas[i] print("name ,shape : ",cur_name,np.shape(cur_var)) var_dic[cur_name] = cur_var ''' #restore_model = tf.train.import_meta_graph(model_prefix+'-'+str(load_epoch)+'.meta') #restore_model.restore(sess,model_prefix+'-'+str(load_epoch)) if Test_Img == 'False': iter_num = 0 accuracy_sum = 0 while iter_num < test_batch_loader.batch_num: batch_images, batch_labels = test_batch_loader.next_batch() images_in = (batch_images - 127.5) * 0.0078125 feat, batch_accuracy = sess.run([features, accuracy], feed_dict={ input_images: images_in, labels: batch_labels }) accuracy_sum += batch_accuracy iter_num += 1 if iter_num % 10 == 0: print("step ", iter_num, batch_accuracy) print("image num: ", test_batch_loader.data_num, "the test accuracy: ", accuracy_sum / (test_batch_loader.batch_num)) elif Test_Img == 'True': with tf.name_scope('valdata'): label_t = np.zeros([1]) feat1 = sess.run([features], feed_dict={ input_images: img1, labels: label_t }) feat2 = sess.run([features], feed_dict={ input_images: img2, labels: label_t }) distance = L2_distance(feat1, feat2, 512) print("the 2 image dis: ", distance) for rot, fdir, fname in os.walk(img_dir): if len(fname) != 0: break img_list = [] print(fname) for i in range(len(fname)): org_img = cv2.imread(os.path.join(rot, fname[i])) img_org = cv2.resize(org_img, (img_shape, img_shape)) img_org = np.expand_dims(img_org, 0) img_list.append(img_org) for i in range(len(fname)): img1 = img_list[i] feat1 = sess.run([features], feed_dict={ input_images: img1, labels: label_t }) j = i + 1 while j < len(fname): img2 = img_list[j] t1 = time.time() feat2 = sess.run([features], feed_dict={ input_images: img2, labels: label_t }) t2 = time.time() print("one image time ", t2 - t1) distance = L2_distance(feat1, feat2, 512) t3 = time.time() print("compere time ", t3 - t2) print(i, j, distance) j += 1 elif Test_Img == 'File': label_t = np.ones([1]) for i in range(len(lines_)): feat_vec = [] feat1_fg = 0 feat2_fg = 0 line_1 = lines_[i] line_1 = string.strip(line_1) line_s = line_1.split(',') dir_path_save = line_s[0][:-4] dir_path_save = "../cropface/" + dir_path_save mkdir_(dir_path_save) for j in range(len(line_s)): feat_vec2 = [] if j == 0: #print("line ",line_s) img1_pic = line_s[0] img1_path = os.path.join(img_dir, img1_pic) img1 = cv2.imread(img1_path) bboxes_1 = detector.get_face(img1) if bboxes_1 is not None: for k in range(bboxes_1.shape[0]): crop_img1 = get_img(img1, bboxes_1[k], img_shape) if k == 0 and SV_IMG: img_save_path = dir_path_save + '/' + line_s[ 0][:-4] + ".jpg" save_image(img_save_path, crop_img1) crop_img1 = (crop_img1 - 127.5) * 0.0078125 crop_img1 = np.expand_dims(crop_img1, 0) feat1 = sess.run([features], feed_dict={ input_images: crop_img1, labels: label_t }) print("a feature shape ", np.shape(feat1)) feat_vec.append(feat1) feat_fg = 1 else: print("a no face detect ") break else: img2_pic = line_s[j] img2_path = os.path.join(img_dir, img2_pic) img2 = cv2.imread(img2_path) bboxes_2 = detector.get_face(img2) if bboxes_2 is not None: for k in range(bboxes_2.shape[0]): crop_img2 = get_img(img2, bboxes_2[k], img_shape) if SV_IMG: img_save_path = dir_path_save + '/' + line_s[ j][:-4] + "-" + str(k) + ".jpg" save_image(img_save_path, crop_img2) crop_img2 = (crop_img2 - 127.5) * 0.0078125 crop_img2 = np.expand_dims(crop_img2, 0) feat2 = sess.run([features], feed_dict={ input_images: crop_img2, labels: label_t }) print("b feature shape ", np.shape(feat2)) feat_vec2.append(feat2) feat2_fg = 1 else: print("b no face detect ") continue if j > 0: t2 = time.time() distance = L2_distance(feat_vec[0], feat_vec2[0], 512) print("distance is ", distance) t3 = time.time() print("compere time ", t3 - t2) result_.write("{} ".format(distance)) result_.write("\n") print(feat2) file_.close() result_.close()
def main(): LAMBDA = 1e-8 center_alpha = 0.9 num_class = 10000 embd_size = 512 args = argument() checkpoint_dir = args.save_model_name lr = args.lr batch_size = args.batch_size epoch_num = args.epoch_num sta = args.sta img_shape = args.img_size train_file = args.train_file val_file = args.val_file train_batch_loader = BatchLoader(train_file, batch_size, img_shape) test_batch_loader = BatchLoader(val_file, batch_size, img_shape) #(Height,Width) = (train_batch_loader.height,train_batch_loader.width) #train_batch_loader = mnist_data(batch_size) print("img shape", img_shape) with tf.name_scope('input'): input_images = tf.placeholder(tf.float32, shape=(batch_size, img_shape[0], img_shape[1], 3), name='input_images') labels = tf.placeholder(tf.int32, shape=(batch_size), name='labels') learn_rate = tf.placeholder(tf.float32, shape=(None), name='learn_rate') with tf.name_scope('var'): global_step = tf.Variable(0, trainable=False, name='global_step') loss_op = CenterLoss(center_alpha, num_class, embd_size) #with tf.device('/gpu:0'): total_loss, accuracy, centers_update_op, center_loss, softmax_loss, pred_class, res1 = build_network( input_images, labels, num_class, sta, loss_op, ratio=LAMBDA) optimizer = tf.train.AdamOptimizer(learn_rate) #optimizer = tf.train.GradientDescentOptimizer(learn_rate) with tf.control_dependencies([centers_update_op]): train_op = optimizer.minimize(total_loss, global_step=global_step) #train_op = optimizer.minimize(total_loss, global_step=global_step) summary_op = tf.summary.merge_all() with tf.Session(config=tf.ConfigProto(log_device_placement=False)) as sess: #sess.run(tf.global_variables_initializer()) writer = tf.summary.FileWriter('../tmp/face_log', sess.graph) saver = tf.train.Saver() if args.pretrained is not None: model_path = args.save_model_name + '-' + str(args.pretrained) #saver.restore(sess,'./face_model/high_score-60') saver.restore(sess, model_path) else: init = tf.global_variables_initializer() sess.run(init) step = sess.run(global_step) epoch_idx = 0 graph_step = 0 while epoch_idx <= epoch_num: step = 0 ckpt_fg = 'True' ps_loss = 0.0 pc_loss = 0.0 acc_sum = 0.0 while step < train_batch_loader.batch_num: batch_images, batch_labels = train_batch_loader.next_batch() #batch_images, batch_labels = train_batch_loader.get_batchdata() in_imgs = (batch_images - 127.5) * 0.0078125 #print("data in ",in_img[0,:2,:2,0]) _, summary_str, train_acc, Center_loss, Softmax_loss, Pred_class, res1_o = sess.run( [ train_op, summary_op, accuracy, center_loss, softmax_loss, pred_class, res1 ], feed_dict={ input_images: in_imgs, labels: batch_labels, learn_rate: lr }) step += 1 #print("step",step, str(Softmax_loss),str(Center_loss)) #print("step label",step, str(batch_labels)) graph_step += 1 if step % 100 == 0: writer.add_summary(summary_str, global_step=graph_step) pc_loss += Center_loss ps_loss += Softmax_loss acc_sum += train_acc if step % 1000 == 0: #lr = lr*0.1 #c_loss+=c_loss #s_loss+=s_loss print("****** Epoch {} Step {}: ***********".format( str(epoch_idx), str(step))) print("center loss: {}".format(pc_loss / 1000.0)) print("softmax_loss: {}".format(ps_loss / 1000.0)) print("train_acc: {}".format(acc_sum / 1000.0)) print("centers", res1_o[0, :5]) print("*******************************") #if (acc_sum/100.0) >= 0.98 and (pc_loss/100.0)<40 and (ps_loss/100.0) <0.1 and ckpt_fg=='True': if ckpt_fg == 'True': print( "******************************************************************************" ) saver.save(sess, checkpoint_dir, global_step=epoch_idx) ckpt_fg = 'False' ps_loss = 0.0 pc_loss = 0.0 acc_sum = 0.0 epoch_idx += 1 if epoch_idx % 10 == 0: print( "******************************************************************************" ) saver.save(sess, checkpoint_dir, global_step=epoch_idx) #writer.add_summary(summary_str, global_step=step) if epoch_idx % 5 == 0: lr = lr * 0.5 if epoch_idx: batch_images, batch_labels = test_batch_loader.next_batch() #batch_images,batch_labels = train_batch_loader.get_valdata() vali_image = (batch_images - 127.5) * 0.0078125 vali_acc = sess.run(accuracy, feed_dict={ input_images: vali_image, labels: batch_labels }) print(("epoch: {}, train_acc:{:.4f}, vali_acc:{:.4f}".format( epoch_idx, train_acc, vali_acc))) sess.close()
def train(self, train_image_indices, batch_size, num_epochs=50, train_method='normal', lambda_1=0, lambda_2=0, start_from_pretrained_model=True, learning_rate=0.01, optimizer='SGD'): if os.path.exists(self.checkpoint_path): os.remove(self.checkpoint_path) model = self.initialize_model( start_from_pretrained_model=start_from_pretrained_model) model = model.to(self.device) criterion = nn.CrossEntropyLoss() if optimizer == 'SGD': optimizer = optim.SGD(model.parameters(), lr=learning_rate, momentum=0.9, weight_decay=5e-4) elif optimizer == 'Adam': optimizer = optim.Adam(model.parameters(), lr=learning_rate, weight_decay=5e-4) else: optimizer = optim.SGD(model.parameters(), lr=learning_rate, momentum=0.9, weight_decay=5e-4) train_batch_loader = BatchLoader(self.train_folder_path, train_image_indices) n_images = len(train_image_indices) if n_images % batch_size == 0: num_batches = n_images // batch_size else: num_batches = (n_images // batch_size) + 1 penalty_inside_list = [] penalty_outside_list = [] train_acc_list = [] train_loss_list = [] val_loss_list = [] val_acc_list = [] best_acc = 0.0 for epoch in range(num_epochs): model.train() train_batch_loader.reset() print('Epoch: {}/{}'.format(epoch + 1, num_epochs)) print('-' * 50) train_correct = 0.0 train_loss = 0.0 penalty_inside = 0.0 penalty_outside = 0.0 for batch in range(num_batches): batch_indices = train_batch_loader.get_batch_indices( batch_size) inputs = self.x_train[batch_indices] labels = self.y_train[batch_indices] inputs, labels = inputs.to(self.device), labels.to(self.device) if train_method == 'bbox': inputs.requires_grad_() outputs = model(inputs) preds = torch.argmax(outputs, dim=1) # cross entropy loss loss = criterion(outputs, labels) input_gradient = torch.autograd.grad(loss, inputs, create_graph=True)[0] penalty_inside_box, penalty_outside_box = self.calculate_penalty_box( batch_indices, input_gradient) new_loss = loss + lambda_1 * penalty_inside_box + lambda_2 * penalty_outside_box optimizer.zero_grad() new_loss.backward() optimizer.step() else: outputs = model(inputs) preds = torch.argmax(outputs, dim=1) # cross entropy loss loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step() penalty_inside_box = torch.tensor(0).to(self.device) penalty_outside_box = torch.tensor(0).to(self.device) train_loss += loss.item() train_correct += torch.sum(preds == labels).float().item() penalty_inside += penalty_inside_box.item() * lambda_1 penalty_outside += penalty_outside_box.item() * lambda_2 train_loss = train_loss / self.train_dataset_length train_loss_list.append(train_loss) train_acc = (train_correct / self.train_dataset_length) * 100.0 train_acc_list.append(train_acc) penalty_inside = penalty_inside / self.train_dataset_length penalty_outside = penalty_outside / self.train_dataset_length penalty_inside_list.append(penalty_inside) penalty_outside_list.append(penalty_outside) print('Train Loss: {:.4f} Acc: {:.4f} % '.format( train_loss, train_acc)) print(f'Penalty Inside Box: {round(penalty_inside, 4)}') print(f'Penalty Outside Box: {round(penalty_outside, 4)}') # validate after each epoch val_correct = 0.0 val_loss = 0.0 model.eval() with torch.no_grad(): for inputs_val, labels_val in self.val_loader: inputs_val, labels_val = inputs_val.to( self.device), labels_val.to(self.device) outputs_val = model(inputs_val) preds_val = torch.argmax(outputs_val, dim=1) loss_test = criterion(outputs_val, labels_val) val_loss += loss_test.item() val_correct += torch.sum( preds_val == labels_val).float().item() val_loss = val_loss / self.val_dataset_length val_loss_list.append(val_loss) val_acc = (val_correct / self.val_dataset_length) * 100.0 val_acc_list.append(val_acc) print('Val Loss: {:.4f} Acc: {:.4f} % \n'.format( val_loss, val_acc)) # save the best model if val_acc > best_acc: best_acc = val_acc model.state_dict() if os.path.exists(self.checkpoint_path): os.remove(self.checkpoint_path) torch.save(model.state_dict(), self.checkpoint_path) return_dict = { 'train_acc_list': train_acc_list, 'train_loss_list': train_loss_list, 'penalty_inside_list': penalty_inside_list, 'penalty_outside_list': penalty_outside_list, 'val_loss_list': val_loss_list, 'val_acc_list': val_acc_list, 'best_acc': best_acc } return return_dict
def __init__(self, sess, config): self.sess = sess self.config = config self.tb_dir = "/data/tensorboard_log_dict/TDNN_white" self.loader = BatchLoader(self.config)
def main(): # setting parameters parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--num_factors', type=float, default=10, help='embedding size') parser.add_argument('--model', type=str, default='mlp_bpr', help='model') parser.add_argument('--epoches', type=str, default=1, help='epoches') parser.add_argument('--learning_rate', type=float, default=0.01, help='learning rate') parser.add_argument('--reg_lambda', type=float, default=1.0, help='l2_regularizer lambda') parser.add_argument('--layers', nargs='?', default='[10,1]', help="Size of each layer.") parser.add_argument('--batch_size', type=int, default=10000, help='minibatch size') parser.add_argument( '--recom_mode', type=str, default='p_u', help='recommendation mode, u_p: users to items, p_u: items to users') parser.add_argument('--decay_rate', type=float, default=0.99, help='decay rate for Adam') parser.add_argument('--keep_prob', type=float, default=0.2, help='dropout probility') parser.add_argument( '--uti_k', type=int, default=30, help='top-k recommendation for recommending items to user') parser.add_argument( '--itu_k', type=int, default=100, help='top-k recommendation for recommending users to item') parser.add_argument('--log_dir', type=str, default='logs', help='directory to store tensorboard logs') parser.add_argument( '--mode', type=str, default='validation', help= 'train: only train the model, validation: train the model and test it with test data, predict: predict new data' ) parser.add_argument( '--dev', type=str, default='cpu', help= 'training by CPU or GPU, input cpu or gpu:0 or gpu:1 or gpu:2 or gpu:3' ) parser.add_argument( '--pIter', type=int, default=2, help='how many rounds of iterations show the effect on the test set') args = parser.parse_args() if FLAGS.mode == 'validation': # read data from file train_file = 'data/train/train_u.csv' test_file = 'data/test/test_u.csv' test_count1_file = 'data/test/test_u_count1.csv' train_X, train_y, test_X, test_y, test_count1_X, test_count1_y, user_pro_dict, pro_user_dict, user_index_map = utils.read_data_val( train_file, test_file, test_count1_file) print(test_count1_X) # read feature data from file user_file = 'data/mid/user_features.csv' item_file = 'data/mid/item_features.csv' user_feature_df = utils.read_user_data(user_file, user_index_map) item_feature_df = utils.read_item_data(item_file) # generate batches batch_loader = BatchLoader(args.batch_size, train_X, train_y) args.num_users = np.max([np.max(train_X['uid'])]) + 1 args.num_items = np.max([np.max(train_X['pid'])]) + 1 model = Model(args, args.recom_mode, batch_loader) model.train_val(test_X, user_pro_dict, pro_user_dict, user_feature_df, item_feature_df) #pred_dict = model.test(test_X, user_pro_dict, pro_user_dict, user_feature_df, item_feature_df) #if args.recom_mode=='u_p': # print(model.cal_MRR(pred_dict, test_X)) #elif args.recom_mode=='p_u': # print(model.cal_pre_k(pred_dict, test_X)) pred_dict = model.cold_start_test(test_count1_X, user_feature_df, item_feature_df) print(model.cal_pre_k(pred_dict, test_count1_X)) elif FLAGS.mode == 'train': # read data from file train_file = 'data/train/train_u.csv' train_X, train_y, user_pro_dict, pro_user_dict, user_index_map = utils.read_data( train_file) # read feature data from file user_file = 'data/mid/user_features.csv' item_file = 'data/mid/item_features.csv' user_feature_df = utils.read_user_data(user_file, user_index_map) item_feature_df = utils.read_item_data(item_file) # generate batches batch_loader = BatchLoader(args.batch_size, train_X, train_y) args.num_users = np.max(train_X['uid']) + 1 args.num_items = len(item_feature_df) + 1 model = Model(args, args.recom_mode, batch_loader) # train and save models model.train(user_pro_dict, pro_user_dict, user_feature_df, item_feature_df) # save the user and index utils.write_file(user_index_map['user'], "save/user_index_map") elif FLAGS.mode == 'predict': user_index_file = 'save/user_index_map' user_index_map = pd.read_csv(user_index_file, names=['user']) args.num_users = len(user_index_map) user_file = 'data/data_pred/user_file.txt' #user_file = 'data/mid/user_features.csv.liaoning' user_df = pd.read_csv(user_file, names=['user']) #user_df = pd.read_csv(user_file,header=None) #user_df.rename(columns={0: 'user'}, inplace=True) #user_df = user_df['user'] item_file = 'data/data_pred/item_file.txt' item_df = pd.read_csv(item_file, names=['pid']) user_index_map = user_index_map.append( user_df[['user']]).drop_duplicates(['user']).reset_index(drop=True) user_index_map['uid'] = user_index_map.index user_df = pd.merge(user_df, user_index_map, left_on='user', right_on='user', how='left') #del user_df['user'] # read feature data from file user_file = 'data/mid/user_features.csv' item_file = 'data/mid/item_features.csv' user_feature_df = utils.read_user_data(user_file, user_index_map) item_feature_df = utils.read_item_data(item_file) args.num_items = len(item_feature_df) + 1 out_file = 'data/predict/predictions' model = Model(args, args.recom_mode) result_list = model.predict(user_df['uid'].values.tolist(), item_df['pid'].values.tolist(), user_feature_df, item_feature_df, out_file) user_list = user_df['user'].values.tolist() head_line = "cate_id," head_line += (',').join(user_list) result_list.insert(0, head_line) with codecs.open(out_file, 'w', encoding='utf-8') as f: for val in result_list: f.write(val + "\n") else: print('incorrect mode input...')
def setup(self, bottom, top): layer_params = yaml.load(self.param_str) self.batch_size = layer_params['batch_size'] self.image_file = layer_params['image_file'] self.batch_loader = BatchLoader(self.image_file, self.batch_size)
# ## Import modules # In[2]: import os import cv2 import numpy as np import tensorflow as tf import tflearn from batch_loader import BatchLoader slim = tf.contrib.slim os.environ['CUDA_VISIBLE_DEVICES'] = '0' train_batch_loader = BatchLoader("./train.txt", 120) test_batch_loader = BatchLoader("./test.txt", 100) # ## Construct network # In[3]: with tf.name_scope('input'): input_images = tf.placeholder(tf.float32, shape=(None, 100, 100, 3), name='input_images') labels = tf.placeholder(tf.int64, shape=(None), name='labels') global_step = tf.Variable(0, trainable=False, name='global_step') # In[4]:
if __name__ == '__main__': # Use GPUs if available args.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # Set the random seed for reproducible experiments random.seed(args.seed) torch.manual_seed(args.seed) # Set the logger utils.set_logger(os.path.join(args.model_dir, 'train.log')) logging.info('device: {}'.format(args.device)) logging.info('Hyper params:%r' % args.__dict__) # Create the input data pipeline logging.info('Loading the datasets...') bl = BatchLoader(args) ## Load train and dev data train_data = bl.load_data('train.json') dev_data = bl.load_data('dev.json') ## Train data ner_train_data, re_train_data = bl.build_data(train_data, is_train=True) train_bls = bl.batch_loader(ner_train_data, re_train_data, args.ner_max_len, args.re_max_len, args.batch_size, is_train=True) num_batchs_per_task = [len(train_bl) for train_bl in train_bls] logging.info( 'num of batch per task for train: {}'.format(num_batchs_per_task)) train_task_ids = sum([[i] * num_batchs_per_task[i]
def __init__(self, sess, batch_size=100, rnn_size=650, layer_depth=2, word_embed_dim=650, char_embed_dim=15, feature_maps=[50, 100, 150, 200, 200, 200, 200], kernels=[1, 2, 3, 4, 5, 6, 7], seq_length=35, max_word_length=65, use_word=False, use_char=True, hsm=0, max_grad_norm=5, highway_layers=2, dropout_prob=0.5, use_batch_norm=True, checkpoint_dir="checkpoint", forward_only=False, data_dir="data", dataset_name="pdb", use_progressbar=False): """Initialize the parameters for LSTM TDNN Args: rnn_size: the dimensionality of hidden layers layer_depth: # of depth in LSTM layers batch_size: size of batch per epoch word_embed_dim: the dimensionality of word embeddings char_embed_dim: the dimensionality of character embeddings feature_maps: list of feature maps (for each kernel width) kernels: list of kernel widths seq_length: max length of a word use_word: whether to use word embeddings or not use_char: whether to use character embeddings or not highway_layers: # of highway layers to use dropout_prob: the probability of dropout use_batch_norm: whether to use batch normalization or not hsm: whether to use hierarchical softmax """ self.sess = sess self.batch_size = batch_size self.seq_length = seq_length # RNN self.rnn_size = rnn_size self.layer_depth = layer_depth # CNN self.use_word = use_word self.use_char = use_char self.word_embed_dim = word_embed_dim self.char_embed_dim = char_embed_dim self.feature_maps = feature_maps self.kernels = kernels # General self.highway_layers = highway_layers self.dropout_prob = dropout_prob self.use_batch_norm = use_batch_norm # Training self.max_grad_norm = max_grad_norm self.max_word_length = max_word_length self.hsm = hsm self.data_dir = data_dir self.dataset_name = dataset_name self.checkpoint_dir = checkpoint_dir self.forward_only = forward_only self.use_progressbar = use_progressbar self.loader = BatchLoader(self.data_dir, self.dataset_name, self.batch_size, self.seq_length, self.max_word_length) print('Word vocab size: %d, Char vocab size: %d, Max word length (incl. padding): %d' % \ (len(self.loader.idx2word), len(self.loader.idx2char), self.loader.max_word_length)) self.max_word_length = self.loader.max_word_length self.char_vocab_size = len(self.loader.idx2char) self.word_vocab_size = len(self.loader.idx2word) # build LSTMTDNN model self.prepare_model() # load checkpoints if self.forward_only == True: if self.load(self.checkpoint_dir, self.dataset_name): print(" [*] SUCCESS to load model for %s." % self.dataset_name) else: print(" [!] Failed to load model for %s." % self.dataset_name) sys.exit(1)
from batch_loader import BatchLoader import config import random if __name__ == '__main__': param = {"net": "pnet", "batch": 64} batch_loader = BatchLoader(param) task = random.choice(config.TRAIN_TASKS[param['net']]) data = batch_loader.next_batch(64, task) for datum in data: print(datum)