예제 #1
0
    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
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
파일: main.py 프로젝트: ratosh/bichano
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()
예제 #5
0
    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
예제 #7
0
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))
예제 #8
0
파일: main.py 프로젝트: lordzth666/Seq2Seq
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
예제 #9
0
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()
예제 #10
0
파일: test.py 프로젝트: yyht/tf-center-loss
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()
예제 #11
0
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()
예제 #12
0
파일: model.py 프로젝트: ck-amrahd/birds
    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
예제 #13
0
    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)
예제 #14
0
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...')
예제 #15
0
 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)
예제 #16
0
# ## 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]:
예제 #17
0

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]
예제 #18
0
    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)
예제 #19
0
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)