Beispiel #1
0
 def convert(cls, npy_model, fluid_path):
     import paddle.v2.fluid as fluid
     data_layer = fluid.layers.data(name="data",
                                    shape=[3, 368, 368],
                                    dtype="float32")
     feed_data = {"data": data_layer}
     net = cls(feed_data)
     place = fluid.CPUPlace()
     exe = fluid.Executor(place)
     exe.run(fluid.default_startup_program())
     net.load(data_path=npy_model, exe=exe, place=place)
     fluid.io.save_persistables(executor=exe, dirname=fluid_path)
Beispiel #2
0
def run_benchmark(model, args):
    if args.use_cprof:
        pr = cProfile.Profile()
        pr.enable()
    start_time = time.time()
    word_dict = paddle.dataset.imdb.word_dict()

    print("load word dict successfully")

    dict_dim = len(word_dict)

    data = fluid.layers.data(name="words",
                             shape=[1],
                             dtype="int64",
                             lod_level=1)
    label = fluid.layers.data(name="label", shape=[1], dtype="int64")

    prediction = model(data, dict_dim)
    cost = fluid.layers.cross_entropy(input=prediction, label=label)
    avg_cost = fluid.layers.mean(x=cost)
    adam_optimizer = fluid.optimizer.Adam(learning_rate=0.002)
    adam_optimizer.minimize(avg_cost)
    accuracy = fluid.evaluator.Accuracy(input=prediction, label=label)

    train_reader = paddle.batch(paddle.reader.shuffle(
        paddle.dataset.imdb.train(word_dict), buf_size=25000),
                                batch_size=args.batch_size)
    place = core.CPUPlace() if args.device == 'CPU' else core.CUDAPlace(0)
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program())

    for it, pass_id in enumerate(xrange(args.pass_num)):
        accuracy.reset(exe)
        if iter == args.iterations:
            break
        for data in train_reader():
            tensor_words = to_lodtensor(map(lambda x: x[0], data), place)

            label = np.array(map(lambda x: x[1], data)).astype("int64")
            label = label.reshape([args.batch_size, 1])

            tensor_label = fluid.LoDTensor()
            tensor_label.set(label, place)

            loss, acc = exe.run(fluid.default_main_program(),
                                feed={
                                    "words": tensor_words,
                                    "label": tensor_label
                                },
                                fetch_list=[avg_cost] + accuracy.metrics)
            pass_acc = accuracy.eval(exe)
            print("Iter: %d, loss: %s, acc: %s, pass_acc: %s" %
                  (it, str(loss), str(acc), str(pass_acc)))
Beispiel #3
0
def run_benchmark(model, args):
    if args.use_cprof:
        pr = cProfile.Profile()
        pr.enable()
    start_time = time.time()
    word_dict = paddle.dataset.imdb.word_dict()

    print("load word dict successfully")

    dict_dim = len(word_dict)
    data = fluid.layers.data(name="words",
                             shape=[args.seq_len * args.batch_size, 1],
                             append_batch_size=False,
                             dtype="int64",
                             lod_level=1)
    label = fluid.layers.data(name="label",
                              shape=[args.batch_size, 1],
                              append_batch_size=False,
                              dtype="int64")
    prediction = model(data, dict_dim)
    cost = fluid.layers.cross_entropy(input=prediction, label=label)
    avg_cost = fluid.layers.mean(x=cost)
    adam_optimizer = fluid.optimizer.Adam(learning_rate=0.002)
    adam_optimizer.minimize(avg_cost)
    accuracy = fluid.evaluator.Accuracy(input=prediction, label=label)

    train_reader = paddle.batch(
        paddle.reader.shuffle(paddle.dataset.imdb.train(word_dict),
                              buf_size=25000),  # only for speed
        batch_size=args.batch_size)
    place = fluid.CPUPlace() if args.device == 'CPU' else fluid.GPUPlace(0)
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program())
    for it, pass_id in enumerate(xrange(args.pass_num)):
        accuracy.reset(exe)
        if it == args.iterations:
            break
        for batch_id, data in enumerate(train_reader()):
            chopped_data = chop_data(data,
                                     chop_len=args.seq_len,
                                     batch_size=args.batch_size)
            tensor_words, tensor_label = prepare_feed_data(chopped_data, place)

            loss, acc = exe.run(fluid.default_main_program(),
                                feed={
                                    "words": tensor_words,
                                    "label": tensor_label
                                },
                                fetch_list=[avg_cost] + accuracy.metrics)
            pass_acc = accuracy.eval(exe)
            print("pass=%d, batch=%d, loss=%f, acc=%f, pass_acc=%f" %
                  (it, batch_id, loss, acc, pass_acc))
Beispiel #4
0
def run_benchmark(model, args):
    if args.use_cprof:
        pr = cProfile.Profile()
        pr.enable()
    start_time = time.time()
    images = fluid.layers.data(name='pixel', shape=[1, 28, 28], dtype=DTYPE)
    label = fluid.layers.data(name='label', shape=[1], dtype='int64')
    predict = model(images)

    cost = fluid.layers.cross_entropy(input=predict, label=label)
    avg_cost = fluid.layers.mean(x=cost)
    opt = fluid.optimizer.AdamOptimizer(
        learning_rate=0.001, beta1=0.9, beta2=0.999)
    opt.minimize(avg_cost)

    accuracy = fluid.evaluator.Accuracy(input=predict, label=label)

    train_reader = paddle.batch(
        paddle.dataset.mnist.train(), batch_size=args.batch_size)

    place = fluid.CPUPlace()
    exe = fluid.Executor(place)

    exe.run(fluid.default_startup_program())

    for pass_id in range(args.pass_num):
        accuracy.reset(exe)
        pass_start = time.clock()
        for batch_id, data in enumerate(train_reader()):
            img_data = np.array(
                map(lambda x: x[0].reshape([1, 28, 28]), data)).astype(DTYPE)
            y_data = np.array(map(lambda x: x[1], data)).astype("int64")
            y_data = y_data.reshape([len(y_data), 1])

            start = time.clock()
            outs = exe.run(fluid.default_main_program(),
                           feed={"pixel": img_data,
                                 "label": y_data},
                           fetch_list=[avg_cost] + accuracy.metrics)
            end = time.clock()
            loss = np.array(outs[0])
            acc = np.array(outs[1])
            print("pass=%d, batch=%d, loss=%f, error=%f, elapse=%f" %
                  (pass_id, batch_id, loss, 1 - acc, (end - start) / 1000))

        pass_end = time.clock()
        test_avg_acc = eval_test(exe, accuracy, avg_cost)
        pass_acc = accuracy.eval(exe)
        print("pass=%d, test_avg_acc=%f, test_avg_acc=%f, elapse=%f" %
              (pass_id, pass_acc, test_avg_acc, (pass_end - pass_start) / 1000))
Beispiel #5
0
    def test_nvprof(self):
        if not fluid.core.is_compile_gpu():
            return
        epoc = 8
        dshape = [4, 3, 28, 28]
        data = layers.data(name='data', shape=[3, 28, 28], dtype='float32')
        conv = layers.conv2d(data, 20, 3, stride=[1, 1], padding=[1, 1])

        place = fluid.GPUPlace(0)
        exe = fluid.Executor(place)
        exe.run(fluid.default_startup_program())

        with profiler.cuda_profiler("cuda_profiler.txt", 'csv') as nvprof:
            for i in range(epoc):
                input = np.random.random(dshape).astype('float32')
                exe.run(fluid.default_main_program(), feed={'data': input})
def main():
    BATCH_SIZE = 100
    PASS_NUM = 5

    word_dict = paddle.dataset.imdb.word_dict()
    print "load word dict successfully"
    dict_dim = len(word_dict)
    class_dim = 2

    data = fluid.layers.data(name="words",
                             shape=[1],
                             dtype="int64",
                             lod_level=1)
    label = fluid.layers.data(name="label", shape=[1], dtype="int64")
    cost, accuracy, acc_out = stacked_lstm_net(data,
                                               label,
                                               input_dim=dict_dim,
                                               class_dim=class_dim)

    train_data = paddle.batch(paddle.reader.shuffle(
        paddle.dataset.imdb.train(word_dict), buf_size=1000),
                              batch_size=BATCH_SIZE)
    place = fluid.CPUPlace()
    exe = fluid.Executor(place)
    feeder = fluid.DataFeeder(feed_list=[data, label], place=place)

    exe.run(fluid.default_startup_program())

    for pass_id in xrange(PASS_NUM):
        accuracy.reset(exe)
        for data in train_data():
            cost_val, acc_val = exe.run(fluid.default_main_program(),
                                        feed=feeder.feed(data),
                                        fetch_list=[cost, acc_out])
            pass_acc = accuracy.eval(exe)
            print("cost=" + str(cost_val) + " acc=" + str(acc_val) +
                  " pass_acc=" + str(pass_acc))
            if cost_val < 1.0 and acc_val > 0.8:
                exit(0)
    exit(1)
Beispiel #7
0
    def load(self, data_path, exe=None, place=None, ignore_missing=False):
        '''Load network weights.
        data_path: The path to the numpy-serialized network weights
        ignore_missing: If true, serialized weights for missing layers are ignored.
        '''
        fluid = import_fluid()
        #load fluid mode directly
        if os.path.isdir(data_path):
            assert (exe is not None), \
                'must provide a executor to load fluid model'
            fluid.io.load_persistables_if_exist(executor=exe,
                                                dirname=data_path)
            return True

        #load model from a npy file
        if exe is None or place is None:
            if self.paddle_env is None:
                place = fluid.CPUPlace()
                exe = fluid.Executor(place)
                self.paddle_env = {'place': place, 'exe': exe}
                exe = exe.run(fluid.default_startup_program())
            else:
                place = self.paddle_env['place']
                exe = self.paddle_env['exe']

        data_dict = np.load(data_path).item()
        for op_name in data_dict:
            if op_name not in self.layers.keys():
                continue
            layer = self.layers[op_name]
            for param_name, data in data_dict[op_name].iteritems():
                try:
                    name = '%s_%s' % (op_name, param_name)
                    v = fluid.global_scope().find_var(name)
                    w = v.get_tensor()
                    w.set(data, place)
                except ValueError:
                    if not ignore_missing:
                        raise
        return True
Beispiel #8
0
def main():
    BATCH_SIZE = 100
    PASS_NUM = 5

    word_dict = paddle.dataset.imdb.word_dict()
    print "load word dict successfully"
    dict_dim = len(word_dict)
    class_dim = 2

    cost, acc = lstm_net(dict_dim=dict_dim, class_dim=class_dim)

    train_data = paddle.batch(paddle.reader.shuffle(
        paddle.dataset.imdb.train(word_dict), buf_size=BATCH_SIZE * 10),
                              batch_size=BATCH_SIZE)
    place = fluid.CPUPlace()
    exe = fluid.Executor(place)

    exe.run(fluid.default_startup_program())

    for pass_id in xrange(PASS_NUM):
        for data in train_data():
            chopped_data = chop_data(data)
            tensor_words, tensor_label = prepare_feed_data(chopped_data, place)

            outs = exe.run(fluid.default_main_program(),
                           feed={
                               "words": tensor_words,
                               "label": tensor_label
                           },
                           fetch_list=[cost, acc])
            cost_val = np.array(outs[0])
            acc_val = np.array(outs[1])

            print("cost=" + str(cost_val) + " acc=" + str(acc_val))
            if acc_val > 0.7:
                exit(0)
    exit(1)
def main():
    BATCH_SIZE = 100
    PASS_NUM = 5

    word_dict = paddle.dataset.imdb.word_dict()
    print "load word dict successfully"
    dict_dim = len(word_dict)
    class_dim = 2

    data = fluid.layers.data(
        name="words", shape=[1], dtype="int64", lod_level=1)
    label = fluid.layers.data(name="label", shape=[1], dtype="int64")
    cost, accuracy, acc_out = stacked_lstm_net(
        data, label, input_dim=dict_dim, class_dim=class_dim)

    train_data = paddle.batch(
        paddle.reader.shuffle(
            paddle.dataset.imdb.train(word_dict), buf_size=1000),
        batch_size=BATCH_SIZE)
    place = fluid.CPUPlace()
    exe = fluid.Executor(place)
    feeder = fluid.DataFeeder(feed_list=[data, label], place=place)

    exe.run(fluid.default_startup_program())

    for pass_id in xrange(PASS_NUM):
        accuracy.reset(exe)
        for data in train_data():
            cost_val, acc_val = exe.run(fluid.default_main_program(),
                                        feed=feeder.feed(data),
                                        fetch_list=[cost, acc_out])
            pass_acc = accuracy.eval(exe)
            print("cost=" + str(cost_val) + " acc=" + str(acc_val) +
                  " pass_acc=" + str(pass_acc))
            if cost_val < 1.0 and acc_val > 0.8:
                exit(0)
    exit(1)
def main():
    BATCH_SIZE = 100
    PASS_NUM = 5

    word_dict = paddle.dataset.imdb.word_dict()
    print "load word dict successfully"
    dict_dim = len(word_dict)
    class_dim = 2

    cost, acc = lstm_net(dict_dim=dict_dim, class_dim=class_dim)

    train_data = paddle.batch(
        paddle.reader.shuffle(
            paddle.dataset.imdb.train(word_dict), buf_size=BATCH_SIZE * 10),
        batch_size=BATCH_SIZE)
    place = fluid.CPUPlace()
    exe = fluid.Executor(place)

    exe.run(fluid.default_startup_program())

    for pass_id in xrange(PASS_NUM):
        for data in train_data():
            chopped_data = chop_data(data)
            tensor_words, tensor_label = prepare_feed_data(chopped_data, place)

            outs = exe.run(fluid.default_main_program(),
                           feed={"words": tensor_words,
                                 "label": tensor_label},
                           fetch_list=[cost, acc])
            cost_val = np.array(outs[0])
            acc_val = np.array(outs[1])

            print("cost=" + str(cost_val) + " acc=" + str(acc_val))
            if acc_val > 0.7:
                exit(0)
    exit(1)
Beispiel #11
0
def run_benchmark(model, args):
    if args.use_cprof:
        pr = cProfile.Profile()
        pr.enable()
    start_time = time.time()

    class_dim = 102
    dshape = [3, 224, 224] if args.order == 'NCHW' else [224, 224, 3]
    input = fluid.layers.data(name='data', shape=dshape, dtype='float32')
    label = fluid.layers.data(name='label', shape=[1], dtype='int64')
    predict = model(input, class_dim)
    cost = fluid.layers.cross_entropy(input=predict, label=label)
    avg_cost = fluid.layers.mean(x=cost)
    optimizer = fluid.optimizer.Momentum(learning_rate=0.01, momentum=0.9)
    opts = optimizer.minimize(avg_cost)
    accuracy = fluid.evaluator.Accuracy(input=predict, label=label)

    train_reader = paddle.batch(paddle.reader.shuffle(
        paddle.dataset.flowers.train(), buf_size=5120),
                                batch_size=args.batch_size)

    place = fluid.CPUPlace() if args.device == 'CPU' else fluid.GPUPlace(0)
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program())

    iter = 0
    for pass_id in range(args.pass_num):
        accuracy.reset(exe)
        if iter == args.iterations:
            break
        for data in train_reader():
            if iter == args.iterations:
                break
            image = np.array(map(lambda x: x[0].reshape(dshape),
                                 data)).astype('float32')
            label = np.array(map(lambda x: x[1], data)).astype('int64')
            label = label.reshape([-1, 1])
            loss, acc = exe.run(fluid.default_main_program(),
                                feed={
                                    'data': image,
                                    'label': label
                                },
                                fetch_list=[avg_cost] + accuracy.metrics)
            pass_acc = accuracy.eval(exe)
            print("Iter: %d, loss: %s, acc: %s, pass_acc: %s" %
                  (iter, str(loss), str(acc), str(pass_acc)))
            iter += 1

    duration = time.time() - start_time
    examples_per_sec = args.iterations * args.batch_size / duration
    sec_per_batch = duration / args.batch_size

    print('\nTotal examples: %d, total time: %.5f' %
          (args.iterations * args.batch_size, duration))
    print('%.5f examples/sec, %.5f sec/batch \n' %
          (examples_per_sec, sec_per_batch))

    if args.use_cprof:
        pr.disable()
        s = StringIO.StringIO()
        sortby = 'cumulative'
        ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
        ps.print_stats()
        print(s.getvalue())
                                         label=next_word,
                                         main_program=inference_program)
test_target = [avg_cost] + test_accuracy.metrics + test_accuracy.states
inference_program = fluid.io.get_inference_program(
    test_target, main_program=inference_program)
train_reader = paddle.batch(paddle.dataset.imikolov.train(word_dict, N),
                            BATCH_SIZE)
test_reader = paddle.batch(paddle.dataset.imikolov.test(word_dict, N),
                           BATCH_SIZE)

place = fluid.GPUPlace(0)
exe = fluid.Executor(place)
feeder = fluid.DataFeeder(
    feed_list=[first_word, second_word, third_word, forth_word, next_word],
    place=place)
exe.run(fluid.default_startup_program())

for pass_id in range(PASS_NUM):
    batch_id = 0
    accuracy.reset(exe)
    print("begin")
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    time_begin = datetime.datetime.now()
    for data in train_reader():
        if batch_id % 100 == 0 and batch_id != 0:
            loss, acc = exe.run(fluid.default_main_program(),
                                feed=feeder.feed(data),
                                fetch_list=[avg_cost] + accuracy.metrics)
            pass_acc = accuracy.eval(exe)
            print("pass_id=" + str(pass_id) + " batch_id=" + str(batch_id) +
                  " cost=" + str(loss[0]) + " avg_cost=" +
optimizer = fluid.optimizer.Adam(learning_rate=0.01)
optimizer.minimize(avg_cost)

accuracy = fluid.evaluator.Accuracy(input=predict, label=label)

BATCH_SIZE = 50
PASS_NUM = 3
train_reader = paddle.batch(
    paddle.reader.shuffle(
        paddle.dataset.mnist.train(), buf_size=500),
    batch_size=BATCH_SIZE)

place = fluid.CPUPlace()
exe = fluid.Executor(place)
feeder = fluid.DataFeeder(feed_list=[images, label], place=place)
exe.run(fluid.default_startup_program())

for pass_id in range(PASS_NUM):
    accuracy.reset(exe)
    for data in train_reader():
        loss, acc = exe.run(fluid.default_main_program(),
                            feed=feeder.feed(data),
                            fetch_list=[avg_cost] + accuracy.metrics)
        pass_acc = accuracy.eval(exe)
        print("pass_id=" + str(pass_id) + " acc=" + str(acc) + " pass_acc=" +
              str(pass_acc))
        # print loss, acc
        if loss < 10.0 and pass_acc > 0.9:
            # if avg cost less than 10.0 and accuracy is larger than 0.9, we think our code is good.
            exit(0)
Beispiel #14
0
def main(window_size, dict_size=10000, emb_size=32, num_neg_samples=10,
         batch_size=512, with_parallel_do=False, sparse_update=True):
    assert window_size % 2 == 1
    words = []
    for i in xrange(window_size):
        words.append(fluid.layers.data(name='word_{0}'.format(i), shape=[1],
                                       dtype='int64'))

    dict_size = min(MAX_DICT_SIZE, dict_size)
    label_word = int(window_size / 2) + 1

    def networks(word_list):
        embs = []
        for i in xrange(window_size):
            if i == label_word:
                continue

            emb = fluid.layers.embedding(
                input=word_list[i],
                size=[dict_size, emb_size],
                param_attr='emb.w',
                is_sparse=sparse_update)

            embs.append(emb)

        embs = fluid.layers.concat(input=embs, axis=1)
        loss = fluid.layers.nce(input=embs,
                                label=word_list[label_word],
                                num_total_classes=dict_size,
                                param_attr='nce.w',
                                bias_attr='nce.b',
                                num_neg_samples=num_neg_samples)
        avg_loss = fluid.layers.mean(x=loss)
        avg_loss /= num_neg_samples + 1
        return avg_loss

    if with_parallel_do:
        for_loop = fluid.layers.ParallelDo(fluid.layers.get_places())
        with for_loop.do():
            word_list = []
            for w in words:
                word_list.append(for_loop.read_input(w))
            for_loop.write_output(networks(word_list))
        avg_loss = fluid.layers.mean(x=for_loop())
    else:
        avg_loss = networks(words)

    adam = fluid.optimizer.Adagrad(learning_rate=1e-3)
    adam.minimize(loss=avg_loss)

    place = fluid.CPUPlace()
    exe = fluid.Executor(place)

    feeder = fluid.DataFeeder(feed_list=words, place=place)

    exe.run(fluid.default_startup_program())
    reader = paddle.batch(
        paddle.reader.buffered(
            reader_creator(window_size=window_size,
                           word_limit=dict_size - 1,
                           path="./preprocessed"), 4000), batch_size)

    for pass_id in xrange(100):
        fluid.io.save_params(exe, dirname='model_{0}'.format(pass_id))
        for batch_id, data in enumerate(reader()):
            avg_loss_np = exe.run(feed=feeder.feed(data), fetch_list=[avg_loss])
            print "Pass ID {0}, Batch ID {1}, Loss {2}".format(pass_id,
                                                               batch_id,
                                                               avg_loss_np[0])
Beispiel #15
0
def main(args):
    """ main
    """
    model_path = args.pretrained_model

    paddle.init(use_gpu=args.with_gpu)

    #1, define network topology
    input_size = cfg.INPUT_SIZE
    output_size = cfg.INPUT_SIZE / cfg.STRIDE

    image = fluid.layers.data(name='image',
                              shape=[3, input_size, input_size],
                              dtype='float32')
    vecmap = fluid.layers.data(name='vecmap',
                               shape=[cfg.VEC_NUM, output_size, output_size],
                               dtype='float32')
    heatmap = fluid.layers.data(
        name='heatmap',
        shape=[cfg.HEATMAP_NUM, output_size, output_size],
        dtype='float32')
    vecmask = fluid.layers.data(name='vecmask',
                                shape=[cfg.VEC_NUM, output_size, output_size],
                                dtype='float32')
    heatmask = fluid.layers.data(
        name='heatmask',
        shape=[cfg.HEATMAP_NUM, output_size, output_size],
        dtype='float32')

    net = MyNet({'data': image})

    vec1 = net.layers['conv5_5_CPM_L1']
    heatmap1 = net.layers['conv5_5_CPM_L2']
    vec2 = net.layers['Mconv7_stage2_L1']
    heatmap2 = net.layers['Mconv7_stage2_L2']
    vec3 = net.layers['Mconv7_stage3_L1']
    heatmap3 = net.layers['Mconv7_stage3_L2']
    vec4 = net.layers['Mconv7_stage4_L1']
    heatmap4 = net.layers['Mconv7_stage4_L2']
    vec5 = net.layers['Mconv7_stage5_L1']
    heatmap5 = net.layers['Mconv7_stage5_L2']
    vec6 = net.layers['Mconv7_stage6_L1']
    heatmap6 = net.layers['Mconv7_stage6_L2']

    loss1_1 = get_mask_loss(vec1, vecmap, vecmask)
    loss1_2 = get_mask_loss(heatmap1, heatmap, heatmask)
    loss2_1 = get_mask_loss(vec2, vecmap, vecmask)
    loss2_2 = get_mask_loss(heatmap2, heatmap, heatmask)
    loss3_1 = get_mask_loss(vec3, vecmap, vecmask)
    loss3_2 = get_mask_loss(heatmap3, heatmap, heatmask)
    loss4_1 = get_mask_loss(vec4, vecmap, vecmask)
    loss4_2 = get_mask_loss(heatmap4, heatmap, heatmask)
    loss5_1 = get_mask_loss(vec5, vecmap, vecmask)
    loss5_2 = get_mask_loss(heatmap5, heatmap, heatmask)
    loss6_1 = get_mask_loss(vec6, vecmap, vecmask)
    loss6_2 = get_mask_loss(heatmap6, heatmap, heatmask)

    loss1 = loss1_1 + loss2_1 + loss3_1 + loss4_1 + loss5_1 + loss6_1
    cost1 = fluid.layers.mean(x=loss1)

    loss2 = loss1_2 + loss2_2 + loss3_2 + loss4_2 + loss5_2 + loss6_2
    cost2 = fluid.layers.mean(x=loss2)

    avg_cost = cost1 + cost2
    #avg_cost = fluid.layers.mean(x=cost)

    model_save_dir = '../models/checkpoints'

    global_step = layers.create_global_var(shape=[1],
                                           value=0.0,
                                           dtype='float32',
                                           persistable=True,
                                           force_cpu=True)
    lr_rate = lr_decay.piecewise_decay(global_step,
                                       values=cfg.LEARNING_RATE_SECTION,
                                       boundaries=cfg.BATCH_SECTION)

    # set learning_rate batch_size  num_passes  model_save_dir

    optimizer = fluid.optimizer.Momentum(
        learning_rate=cfg.LEARNING_RATE,
        global_step=global_step,
        momentum=cfg.MOMENTUM,
        regularization=fluid.regularizer.L2Decay(cfg.WEIGHT_DECAY))

    opts = optimizer.minimize(avg_cost)

    inference_program = fluid.default_main_program().clone()
    with fluid.program_guard(inference_program):
        test_target = [avg_cost]
        inference_program = fluid.io.get_inference_program(test_target)

    place = fluid.CUDAPlace(3) if args.with_gpu is True else fluid.CPUPlace()
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program())

    train_reader = paddle.batch(CocoFolder.CocoFolder(
        cfg.TRAIN_DATA_PATH, [
            cfg.TRAIN_IMAGELIST_FILE, cfg.TRAIN_MASKLIST_FILE,
            cfg.TRAIN_KPTJSON_FILE
        ], cfg.STRIDE,
        Mytransforms.Compose([
            Mytransforms.RandomResized(),
            Mytransforms.RandomRotate(cfg.RANDOM_ROTATE_ANGLE),
            Mytransforms.RandomCrop(cfg.INPUT_SIZE),
            Mytransforms.RandomHorizontalFlip(),
        ])).reader,
                                batch_size=cfg.BATCH_SIZE)

    feeder = fluid.DataFeeder(
        place=place, feed_list=[image, vecmap, heatmap, vecmask, heatmask])

    if not model_path:
        pass
    elif model_path.find('.npy') > 0:
        net.load(data_path=model_path, exe=exe, place=place)
    else:
        net.load(data_path=model_path, exe=exe)

    for pass_id in range(cfg.NUM_PASSES):
        for batch_id, data in enumerate(train_reader()):
            loss, step_v, lr_rate_v = exe.run(fluid.default_main_program(),
                                              feed=feeder.feed(data),
                                              fetch_list=[avg_cost] +
                                              [global_step] + [lr_rate])
            print("Pass {0}, batch {1}, loss {2}, step {3}, lr{4}".format(
                pass_id, batch_id, loss[0], step_v[0], lr_rate_v[0]))
            if batch_id % 3000 == 0:
                model_path = os.path.join(model_save_dir,
                                          'batch' + str(batch_id))
                print 'save models to %s' % (model_path)
                fluid.io.save_inference_model(model_path, ['image'],
                                              [vec6, heatmap6], exe)
        '''
        test loss needed
        for data in test_reader():
            loss = exe.run(inference_program,
                                feed=feeder.feed(data),
                                fetch_list=[avg_cost])
        '''

        print("End pass {0}".format(pass_id))

        if pass_id % 1 == 0:
            model_path = os.path.join(model_save_dir, 'pass' + str(pass_id))
            print 'save models to %s' % (model_path)
            fluid.io.save_inference_model(model_path, ['image'],
                                          [vec6, heatmap6], exe)
Beispiel #16
0
def main():
    if args.data_set == "cifar10":
        classdim = 10
        if args.data_format == 'NCHW':
            data_shape = [3, 32, 32]
        else:
            data_shape = [32, 32, 3]
    else:
        classdim = 102
        if args.data_format == 'NCHW':
            data_shape = [3, 224, 224]
        else:
            data_shape = [224, 224, 3]

    # Input data
    images = fluid.layers.data(name='pixel', shape=data_shape, dtype='float32')
    label = fluid.layers.data(name='label', shape=[1], dtype='int64')

    # Train program
    net = vgg16_bn_drop(images)
    predict = fluid.layers.fc(input=net, size=classdim, act='softmax')
    cost = fluid.layers.cross_entropy(input=predict, label=label)
    avg_cost = fluid.layers.mean(x=cost)

    # Evaluator
    accuracy = fluid.evaluator.Accuracy(input=predict, label=label)

    # inference program
    inference_program = fluid.default_main_program().clone()
    with fluid.program_guard(inference_program):
        test_target = accuracy.metrics + accuracy.states
        inference_program = fluid.io.get_inference_program(test_target)

    # Optimization
    optimizer = fluid.optimizer.Adam(learning_rate=args.learning_rate)
    opts = optimizer.minimize(avg_cost)

    fluid.memory_optimize(fluid.default_main_program())

    # Initialize executor
    place = core.CPUPlace() if args.device == 'CPU' else core.CUDAPlace(0)
    exe = fluid.Executor(place)

    # Parameter initialization
    exe.run(fluid.default_startup_program())

    # data reader
    train_reader = paddle.batch(
        paddle.reader.shuffle(
            paddle.dataset.cifar.train10()
            if args.data_set == 'cifar10' else paddle.dataset.flowers.train(),
            buf_size=5120),
        batch_size=args.batch_size)
    test_reader = paddle.batch(
        paddle.dataset.cifar.test10()
        if args.data_set == 'cifar10' else paddle.dataset.flowers.test(),
        batch_size=args.batch_size)

    # test
    def test(exe):
        accuracy.reset(exe)
        for batch_id, data in enumerate(test_reader()):
            img_data = np.array(map(lambda x: x[0].reshape(data_shape),
                                    data)).astype("float32")
            y_data = np.array(map(lambda x: x[1], data)).astype("int64")
            y_data = y_data.reshape([-1, 1])

            exe.run(inference_program,
                    feed={"pixel": img_data,
                          "label": y_data})

        return accuracy.eval(exe)

    iters = 0
    for pass_id in range(args.num_passes):
        # train
        start_time = time.time()
        num_samples = 0
        accuracy.reset(exe)
        for batch_id, data in enumerate(train_reader()):
            img_data = np.array(map(lambda x: x[0].reshape(data_shape),
                                    data)).astype("float32")
            y_data = np.array(map(lambda x: x[1], data)).astype("int64")
            y_data = y_data.reshape([-1, 1])

            loss, acc = exe.run(fluid.default_main_program(),
                                feed={"pixel": img_data,
                                      "label": y_data},
                                fetch_list=[avg_cost] + accuracy.metrics)
            iters += 1
            num_samples += len(data)
            print(
                "Pass = %d, Iters = %d, Loss = %f, Accuracy = %f" %
                (pass_id, iters, loss, acc)
            )  # The accuracy is the accumulation of batches, but not the current batch.

        pass_elapsed = time.time() - start_time
        pass_train_acc = accuracy.eval(exe)
        pass_test_acc = test(exe)
        print(
            "Pass = %d, Training performance = %f imgs/s, Train accuracy = %f, Test accuracy = %f\n"
            % (pass_id, num_samples / pass_elapsed, pass_train_acc,
               pass_test_acc))
def main():
    # define network topology
    word = fluid.layers.data(name='word_data',
                             shape=[1],
                             dtype='int64',
                             lod_level=1)
    predicate = fluid.layers.data(name='verb_data',
                                  shape=[1],
                                  dtype='int64',
                                  lod_level=1)
    ctx_n2 = fluid.layers.data(name='ctx_n2_data',
                               shape=[1],
                               dtype='int64',
                               lod_level=1)
    ctx_n1 = fluid.layers.data(name='ctx_n1_data',
                               shape=[1],
                               dtype='int64',
                               lod_level=1)
    ctx_0 = fluid.layers.data(name='ctx_0_data',
                              shape=[1],
                              dtype='int64',
                              lod_level=1)
    ctx_p1 = fluid.layers.data(name='ctx_p1_data',
                               shape=[1],
                               dtype='int64',
                               lod_level=1)
    ctx_p2 = fluid.layers.data(name='ctx_p2_data',
                               shape=[1],
                               dtype='int64',
                               lod_level=1)
    mark = fluid.layers.data(name='mark_data',
                             shape=[1],
                             dtype='int64',
                             lod_level=1)
    feature_out = db_lstm(**locals())
    target = fluid.layers.data(name='target',
                               shape=[1],
                               dtype='int64',
                               lod_level=1)
    crf_cost = fluid.layers.linear_chain_crf(input=feature_out,
                                             label=target,
                                             param_attr=fluid.ParamAttr(
                                                 name='crfw',
                                                 learning_rate=mix_hidden_lr))
    avg_cost = fluid.layers.mean(x=crf_cost)

    # TODO(qiao)
    # check other optimizers and check why out will be NAN
    sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.0001)
    sgd_optimizer.minimize(avg_cost)

    # TODO(qiao)
    # add dependency track and move this config before optimizer
    crf_decode = fluid.layers.crf_decoding(
        input=feature_out, param_attr=fluid.ParamAttr(name='crfw'))

    precision, recall, f1_score = fluid.layers.chunk_eval(
        input=crf_decode,
        label=target,
        chunk_scheme="IOB",
        num_chunk_types=int(math.ceil((label_dict_len - 1) / 2.0)))

    train_data = paddle.batch(paddle.reader.shuffle(
        paddle.dataset.conll05.test(), buf_size=8192),
                              batch_size=BATCH_SIZE)
    place = fluid.CPUPlace()
    feeder = fluid.DataFeeder(feed_list=[
        word, ctx_n2, ctx_n1, ctx_0, ctx_p1, ctx_p2, predicate, mark, target
    ],
                              place=place)
    exe = fluid.Executor(place)

    exe.run(fluid.default_startup_program())

    embedding_param = fluid.g_scope.find_var(embedding_name).get_tensor()
    embedding_param.set(
        load_parameter(conll05.get_embedding(), word_dict_len, word_dim),
        place)

    batch_id = 0
    for pass_id in xrange(PASS_NUM):
        for data in train_data():
            outs = exe.run(fluid.default_main_program(),
                           feed=feeder.feed(data),
                           fetch_list=[avg_cost, precision, recall, f1_score])
            avg_cost_val = np.array(outs[0])
            precision_val = np.array(outs[1])
            recall_val = np.array(outs[2])
            f1_score_val = np.array(outs[3])

            if batch_id % 10 == 0:
                print("avg_cost=" + str(avg_cost_val))
                print("precision_val=" + str(precision_val))
                print("recall_val:" + str(recall_val))
                print("f1_score_val:" + str(f1_score_val))

            # exit early for CI
            exit(0)

            batch_id = batch_id + 1
Beispiel #18
0
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import numpy as np
import argparse
import time

import paddle.v2 as paddle
import paddle.v2.fluid as fluid
import paddle.v2.fluid.profiler as profiler

SEED = 1
DTYPE = "float32"
# random seed must set before configuring the network.
fluid.default_startup_program().random_seed = SEED

def parse_args():
    parser = argparse.ArgumentParser("mnist model benchmark.")
    parser.add_argument(
        '--batch_size', type=int, default=128, help='The minibatch size.')
    parser.add_argument(
        '--iterations', type=int, default=35, help='The number of minibatches.')
    parser.add_argument(
        '--pass_num', type=int, default=5, help='The number of passes.')
    parser.add_argument(
        '--device',
        type=str,
        default='GPU',
        choices=['CPU', 'GPU'],
        help='The device type.')
Beispiel #19
0
def main(dict_path):
    word_dict = load_vocab(dict_path)
    word_dict["<unk>"] = len(word_dict)
    dict_dim = len(word_dict)
    print("The dictionary size is : %d" % dict_dim)

    data, label, prediction, avg_cost = conv_net(dict_dim)

    sgd_optimizer = fluid.optimizer.SGD(learning_rate=conf.learning_rate)
    sgd_optimizer.minimize(avg_cost)

    accuracy = fluid.evaluator.Accuracy(input=prediction, label=label)

    inference_program = fluid.default_main_program().clone()
    with fluid.program_guard(inference_program):
        test_target = accuracy.metrics + accuracy.states
        inference_program = fluid.io.get_inference_program(test_target)

    # The training data set.
    train_reader = paddle.batch(
        paddle.reader.shuffle(
            paddle.dataset.imdb.train(word_dict), buf_size=51200),
        batch_size=conf.batch_size)

    # The testing data set.
    test_reader = paddle.batch(
        paddle.reader.shuffle(
            paddle.dataset.imdb.test(word_dict), buf_size=51200),
        batch_size=conf.batch_size)

    if conf.use_gpu:
        place = fluid.CUDAPlace(0)
    else:
        place = fluid.CPUPlace()

    exe = fluid.Executor(place)

    feeder = fluid.DataFeeder(feed_list=[data, label], place=place)

    exe.run(fluid.default_startup_program())

    def test(exe):
        accuracy.reset(exe)
        for batch_id, data in enumerate(test_reader()):
            input_seq = to_lodtensor(map(lambda x: x[0], data), place)
            y_data = np.array(map(lambda x: x[1], data)).astype("int64")
            y_data = y_data.reshape([-1, 1])
            acc = exe.run(inference_program,
                          feed={"words": input_seq,
                                "label": y_data})
        test_acc = accuracy.eval(exe)
        return test_acc

    total_time = 0.
    for pass_id in xrange(conf.num_passes):
        accuracy.reset(exe)
        start_time = time.time()
        for batch_id, data in enumerate(train_reader()):
            cost_val, acc_val = exe.run(
                fluid.default_main_program(),
                feed=feeder.feed(data),
                fetch_list=[avg_cost, accuracy.metrics[0]])
            pass_acc = accuracy.eval(exe)
            if batch_id and batch_id % conf.log_period == 0:
                print("Pass id: %d, batch id: %d, cost: %f, pass_acc %f" %
                      (pass_id, batch_id, cost_val, pass_acc))
        end_time = time.time()
        total_time += (end_time - start_time)
        pass_test_acc = test(exe)
        print("Pass id: %d, test_acc: %f" % (pass_id, pass_test_acc))
    print("Total train time: %f" % (total_time))
def main():
    # define network topology
    word = fluid.layers.data(
        name='word_data', shape=[1], dtype='int64', lod_level=1)
    predicate = fluid.layers.data(
        name='verb_data', shape=[1], dtype='int64', lod_level=1)
    ctx_n2 = fluid.layers.data(
        name='ctx_n2_data', shape=[1], dtype='int64', lod_level=1)
    ctx_n1 = fluid.layers.data(
        name='ctx_n1_data', shape=[1], dtype='int64', lod_level=1)
    ctx_0 = fluid.layers.data(
        name='ctx_0_data', shape=[1], dtype='int64', lod_level=1)
    ctx_p1 = fluid.layers.data(
        name='ctx_p1_data', shape=[1], dtype='int64', lod_level=1)
    ctx_p2 = fluid.layers.data(
        name='ctx_p2_data', shape=[1], dtype='int64', lod_level=1)
    mark = fluid.layers.data(
        name='mark_data', shape=[1], dtype='int64', lod_level=1)
    feature_out = db_lstm(**locals())
    target = fluid.layers.data(
        name='target', shape=[1], dtype='int64', lod_level=1)
    crf_cost = fluid.layers.linear_chain_crf(
        input=feature_out,
        label=target,
        param_attr=fluid.ParamAttr(
            name='crfw', learning_rate=mix_hidden_lr))
    avg_cost = fluid.layers.mean(x=crf_cost)

    # TODO(qiao)
    # check other optimizers and check why out will be NAN
    sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.0001)
    sgd_optimizer.minimize(avg_cost)

    # TODO(qiao)
    # add dependency track and move this config before optimizer
    crf_decode = fluid.layers.crf_decoding(
        input=feature_out, param_attr=fluid.ParamAttr(name='crfw'))

    precision, recall, f1_score = fluid.layers.chunk_eval(
        input=crf_decode,
        label=target,
        chunk_scheme="IOB",
        num_chunk_types=int(math.ceil((label_dict_len - 1) / 2.0)))

    train_data = paddle.batch(
        paddle.reader.shuffle(
            paddle.dataset.conll05.test(), buf_size=8192),
        batch_size=BATCH_SIZE)
    place = fluid.CPUPlace()
    feeder = fluid.DataFeeder(
        feed_list=[
            word, ctx_n2, ctx_n1, ctx_0, ctx_p1, ctx_p2, predicate, mark, target
        ],
        place=place)
    exe = fluid.Executor(place)

    exe.run(fluid.default_startup_program())

    embedding_param = fluid.g_scope.find_var(embedding_name).get_tensor()
    embedding_param.set(
        load_parameter(conll05.get_embedding(), word_dict_len, word_dim), place)

    batch_id = 0
    for pass_id in xrange(PASS_NUM):
        for data in train_data():
            outs = exe.run(fluid.default_main_program(),
                           feed=feeder.feed(data),
                           fetch_list=[avg_cost, precision, recall, f1_score])
            avg_cost_val = np.array(outs[0])
            precision_val = np.array(outs[1])
            recall_val = np.array(outs[2])
            f1_score_val = np.array(outs[3])

            if batch_id % 10 == 0:
                print("avg_cost=" + str(avg_cost_val))
                print("precision_val=" + str(precision_val))
                print("recall_val:" + str(recall_val))
                print("f1_score_val:" + str(f1_score_val))

            # exit early for CI
            exit(0)

            batch_id = batch_id + 1
Beispiel #21
0
def run_benchmark(model, args):
    if args.use_cprof:
        pr = cProfile.Profile()
        pr.enable()
    start_time = time.time()
    # Input data
    images = fluid.layers.data(name='pixel', shape=[1, 28, 28], dtype=DTYPE)
    label = fluid.layers.data(name='label', shape=[1], dtype='int64')

    # Train program
    predict = model(images)
    cost = fluid.layers.cross_entropy(input=predict, label=label)
    avg_cost = fluid.layers.mean(x=cost)

    # Evaluator
    accuracy = fluid.evaluator.Accuracy(input=predict, label=label)

    # inference program
    inference_program = fluid.default_main_program().clone()
    with fluid.program_guard(inference_program):
        test_target = accuracy.metrics + accuracy.states
        inference_program = fluid.io.get_inference_program(test_target)

    # Optimization
    opt = fluid.optimizer.AdamOptimizer(learning_rate=0.001,
                                        beta1=0.9,
                                        beta2=0.999)
    opt.minimize(avg_cost)

    fluid.memory_optimize(fluid.default_main_program())

    # Initialize executor
    place = fluid.CPUPlace() if args.device == 'CPU' else fluid.CUDAPlace(0)
    exe = fluid.Executor(place)

    # Parameter initialization
    exe.run(fluid.default_startup_program())

    # Reader
    train_reader = paddle.batch(paddle.dataset.mnist.train(),
                                batch_size=args.batch_size)

    for pass_id in range(args.pass_num):
        accuracy.reset(exe)
        pass_start = time.time()
        for batch_id, data in enumerate(train_reader()):
            img_data = np.array(map(lambda x: x[0].reshape([1, 28, 28]),
                                    data)).astype(DTYPE)
            y_data = np.array(map(lambda x: x[1], data)).astype("int64")
            y_data = y_data.reshape([len(y_data), 1])

            start = time.time()
            outs = exe.run(
                fluid.default_main_program(),
                feed={
                    "pixel": img_data,
                    "label": y_data
                },
                fetch_list=[avg_cost] + accuracy.metrics
            )  # The accuracy is the accumulation of batches, but not the current batch.

            end = time.time()
            loss = np.array(outs[0])
            acc = np.array(outs[1])
            print("pass=%d, batch=%d, loss=%f, error=%f, elapse=%f" %
                  (pass_id, batch_id, loss, 1 - acc, (end - start) / 1000))

        pass_end = time.time()

        train_avg_acc = accuracy.eval(exe)
        test_avg_acc = eval_test(exe, accuracy, inference_program)

        print("pass=%d, train_avg_acc=%f, test_avg_acc=%f, elapse=%f" %
              (pass_id, train_avg_acc, test_avg_acc,
               (pass_end - pass_start) / 1000))