def __init__(self, learning_rate): self.scope = fluid.core.Scope() self.learning_rate = learning_rate self.program = fluid.Program() self.startup = fluid.Program() with fluid.program_guard(self.program, self.startup): mnist_network() self.place = fluid.CPUPlace() self.executor = fluid.Executor(self.place) self.executor.run(self.startup, scope=self.scope) self.optimize_program = fluid.Program()
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)))
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)
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))
def paddle_random_normal(shape, loc=.0, scale=1., seed=1, dtype="float32"): program = fluid.framework.Program() block = program.global_block() w = block.create_var(dtype="float32", shape=shape, lod_level=0, name="param", initializer=fluid.initializer.NormalInitializer( loc=.0, scale=scale, seed=seed)) place = fluid.CPUPlace() exe = fluid.Executor(place) out = exe.run(program, fetch_list=[w]) return np.array(out[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))
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 __init__(self, worker_id): self.worker_id = worker_id self.scope = fluid.core.Scope() self.program = fluid.Program() self.startup = fluid.Program() with fluid.program_guard(self.program, self.startup): img, label, self.loss = mnist_network() self.place = fluid.CPUPlace() self.executor = fluid.Executor(self.place) self.reader_creator = paddle.batch(paddle.reader.shuffle( paddle.dataset.mnist.train(), buf_size=8192), batch_size=BATCH_SIZE) self.reader = self.reader_creator() self.feeder = fluid.DataFeeder(feed_list=[img, label], place=self.place)
def test_train_dyn_rnn(self): main_program = fluid.Program() startup_program = fluid.Program() with fluid.program_guard(main_program, startup_program): sentence = fluid.layers.data(name='word', shape=[1], dtype='int64', lod_level=1) sent_emb = fluid.layers.embedding(input=sentence, size=[len(self.word_dict), 32], dtype='float32') rnn = fluid.layers.DynamicRNN() with rnn.block(): in_ = rnn.step_input(sent_emb) mem = rnn.memory(shape=[100], dtype='float32') out_ = fluid.layers.fc(input=[in_, mem], size=100, act='tanh') rnn.update_memory(mem, out_) rnn.output(out_) last = fluid.layers.sequence_pool(input=rnn(), pool_type='last') logits = fluid.layers.fc(input=last, size=1, act=None) label = fluid.layers.data(name='label', shape=[1], dtype='float32') loss = fluid.layers.sigmoid_cross_entropy_with_logits(x=logits, label=label) loss = fluid.layers.mean(x=loss) sgd = fluid.optimizer.Adam(1e-3) sgd.minimize(loss=loss) cpu = fluid.CPUPlace() exe = fluid.Executor(cpu) exe.run(startup_program) feeder = fluid.DataFeeder(feed_list=[sentence, label], place=cpu) data = next(self.train_data()) loss_0 = exe.run(main_program, feed=feeder.feed(data), fetch_list=[loss])[0] for _ in xrange(100): val = exe.run(main_program, feed=feeder.feed(data), fetch_list=[loss])[0] # loss should be small after 100 mini-batch self.assertLess(val[0], loss_0[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 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 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
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 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))
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())
def main(): try: os.makedirs("./out") except OSError as e: if e.errno != errno.EEXIST: raise startup_program = fluid.Program() d_program = fluid.Program() dg_program = fluid.Program() with fluid.program_guard(d_program, startup_program): img = fluid.layers.data(name='img', shape=[784], dtype='float32') d_loss = fluid.layers.sigmoid_cross_entropy_with_logits( x=D(img), label=fluid.layers.data(name='label', shape=[1], dtype='float32')) d_loss = fluid.layers.mean(x=d_loss) with fluid.program_guard(dg_program, startup_program): noise = fluid.layers.data(name='noise', shape=[NOISE_SIZE], dtype='float32') g_img = G(x=noise) g_program = dg_program.clone() dg_loss = fluid.layers.sigmoid_cross_entropy_with_logits( x=D(g_img), label=fluid.layers.fill_constant_batch_size_like(input=noise, dtype='float32', shape=[-1, 1], value=1.0)) dg_loss = fluid.layers.mean(x=dg_loss) opt = fluid.optimizer.Adam(learning_rate=LEARNING_RATE) opt.minimize(loss=d_loss, startup_program=startup_program) opt.minimize(loss=dg_loss, startup_program=startup_program, parameter_list=[ p.name for p in g_program.global_block().all_parameters() ]) exe = fluid.Executor(fluid.CPUPlace()) exe.run(startup_program) num_true = NUM_REAL_IMGS_IN_BATCH train_reader = paddle.batch(paddle.reader.shuffle( paddle.dataset.mnist.train(), buf_size=60000), batch_size=num_true) for pass_id in range(NUM_PASS): for batch_id, data in enumerate(train_reader()): num_true = len(data) n = numpy.random.uniform(low=-1.0, high=1.0, size=[num_true * NOISE_SIZE ]).astype('float32').reshape( [num_true, NOISE_SIZE]) generated_img = exe.run(g_program, feed={'noise': n}, fetch_list={g_img})[0] real_data = numpy.array(map(lambda x: x[0], data)).astype('float32') real_data = real_data.reshape(num_true, 784) total_data = numpy.concatenate([real_data, generated_img]) total_label = numpy.concatenate([ numpy.ones(shape=[real_data.shape[0], 1], dtype='float32'), numpy.zeros(shape=[real_data.shape[0], 1], dtype='float32') ]) d_loss_np = exe.run(d_program, feed={ 'img': total_data, 'label': total_label }, fetch_list={d_loss})[0] for _ in xrange(NUM_TRAIN_TIMES_OF_DG): n = numpy.random.uniform(low=-1.0, high=1.0, size=[2 * num_true * NOISE_SIZE ]).astype('float32').reshape([ 2 * num_true, NOISE_SIZE, 1, 1 ]) dg_loss_np = exe.run(dg_program, feed={'noise': n}, fetch_list={dg_loss})[0] print("Pass ID={0}, Batch ID={1}, D-Loss={2}, DG-Loss={3}".format( pass_id, batch_id, d_loss_np, dg_loss_np)) # generate image each batch fig = plot(generated_img) plt.savefig('out/{0}.png'.format(str(pass_id).zfill(3)), bbox_inches='tight') plt.close(fig)
inference_program = fluid.default_main_program().clone() test_accuracy = fluid.evaluator.Accuracy(input=predict_word, 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),
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])
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)
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
def test_plain_while_op(self): main_program = fluid.Program() startup_program = fluid.Program() with fluid.program_guard(main_program, startup_program): sentence = fluid.layers.data(name='word', shape=[1], dtype='int64', lod_level=1) sent_emb = fluid.layers.embedding(input=sentence, size=[len(self.word_dict), 32], dtype='float32') label = fluid.layers.data(name='label', shape=[1], dtype='float32') rank_table = fluid.layers.lod_rank_table(x=sent_emb) sent_emb_array = fluid.layers.lod_tensor_to_array(x=sent_emb, table=rank_table) seq_len = fluid.layers.max_sequence_len(rank_table=rank_table) i = fluid.layers.fill_constant(shape=[1], dtype='int64', value=0) i.stop_gradient = False boot_mem = fluid.layers.fill_constant_batch_size_like( input=fluid.layers.array_read(array=sent_emb_array, i=i), value=0, shape=[-1, 100], dtype='float32') boot_mem.stop_gradient = False mem_array = fluid.layers.array_write(x=boot_mem, i=i) cond = fluid.layers.less_than(x=i, y=seq_len) cond.stop_gradient = False while_op = fluid.layers.While(cond=cond) out = fluid.layers.create_array(dtype='float32') with while_op.block(): mem = fluid.layers.array_read(array=mem_array, i=i) ipt = fluid.layers.array_read(array=sent_emb_array, i=i) mem = fluid.layers.shrink_memory(x=mem, i=i, table=rank_table) hidden = fluid.layers.fc(input=[mem, ipt], size=100, act='tanh') fluid.layers.array_write(x=hidden, i=i, array=out) fluid.layers.increment(x=i, in_place=True) fluid.layers.array_write(x=hidden, i=i, array=mem_array) fluid.layers.less_than(x=i, y=seq_len, cond=cond) all_timesteps = fluid.layers.array_to_lod_tensor(x=out, table=rank_table) last = fluid.layers.sequence_pool(input=all_timesteps, pool_type='last') logits = fluid.layers.fc(input=last, size=1, act=None) loss = fluid.layers.sigmoid_cross_entropy_with_logits(x=logits, label=label) loss = fluid.layers.mean(x=loss) sgd = fluid.optimizer.SGD(1e-4) sgd.minimize(loss=loss) cpu = fluid.CPUPlace() exe = fluid.Executor(cpu) exe.run(startup_program) feeder = fluid.DataFeeder(feed_list=[sentence, label], place=cpu) data = next(self.train_data()) val = exe.run(main_program, feed=feeder.feed(data), fetch_list=[loss])[0] self.assertEqual((1, ), val.shape) print(val) self.assertFalse(numpy.isnan(val))
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))