|
|
|
|
@ -53,48 +53,40 @@ def train_program():
|
|
|
|
|
predict = inference_program()
|
|
|
|
|
cost = fluid.layers.cross_entropy(input=predict, label=label)
|
|
|
|
|
avg_cost = fluid.layers.mean(cost)
|
|
|
|
|
# acc = fluid.layers.accuracy(input=predict, label=label)
|
|
|
|
|
# return avg_cost, acc
|
|
|
|
|
return avg_cost
|
|
|
|
|
acc = fluid.layers.accuracy(input=predict, label=label)
|
|
|
|
|
return [avg_cost, acc]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def train(use_cuda, save_dirname):
|
|
|
|
|
def train(use_cuda, train_program, save_dirname):
|
|
|
|
|
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
|
|
|
|
|
optimizer = fluid.optimizer.Adam(learning_rate=0.001)
|
|
|
|
|
|
|
|
|
|
trainer = fluid.Trainer(
|
|
|
|
|
train_func=train_program,
|
|
|
|
|
infer_func=inference_program,
|
|
|
|
|
place=place,
|
|
|
|
|
optimizer=optimizer)
|
|
|
|
|
train_func=train_program, place=place, optimizer=optimizer)
|
|
|
|
|
|
|
|
|
|
def event_handler(event):
|
|
|
|
|
if isinstance(event, fluid.EndEpochEvent):
|
|
|
|
|
# if (event.epoch + 1) % 10 == 0:
|
|
|
|
|
# trainer.save_params(save_dirname)
|
|
|
|
|
trainer.save_inference_model(save_dirname)
|
|
|
|
|
|
|
|
|
|
# TODO: Uncomment this part once we are sure that .train is working
|
|
|
|
|
# test_reader = paddle.batch(
|
|
|
|
|
# paddle.dataset.mnist.test(), batch_size=BATCH_SIZE)
|
|
|
|
|
# test_metrics = trainer.test(reader=test_reader)
|
|
|
|
|
# avg_cost_set = test_metrics[0]
|
|
|
|
|
# acc_set = test_metrics[1]
|
|
|
|
|
#
|
|
|
|
|
# # get test acc and loss
|
|
|
|
|
# acc = numpy.array(acc_set).mean()
|
|
|
|
|
# avg_cost = numpy.array(avg_cost_set).mean()
|
|
|
|
|
#
|
|
|
|
|
# print("avg_cost: %s" % avg_cost)
|
|
|
|
|
# print("acc : %s" % acc)
|
|
|
|
|
#
|
|
|
|
|
# if float(acc) > 0.2: # Smaller value to increase CI speed
|
|
|
|
|
# trainer.save_params(save_dirname)
|
|
|
|
|
# else:
|
|
|
|
|
# print('BatchID {0}, Test Loss {1:0.2}, Acc {2:0.2}'.format(
|
|
|
|
|
# event.epoch + 1, float(avg_cost), float(acc)))
|
|
|
|
|
# if math.isnan(float(avg_cost)):
|
|
|
|
|
# sys.exit("got NaN loss, training failed.")
|
|
|
|
|
test_reader = paddle.batch(
|
|
|
|
|
paddle.dataset.mnist.test(), batch_size=BATCH_SIZE)
|
|
|
|
|
test_metrics = trainer.test(
|
|
|
|
|
reader=test_reader, feed_order=['img', 'label'])
|
|
|
|
|
avg_cost_set = test_metrics[0]
|
|
|
|
|
acc_set = test_metrics[1]
|
|
|
|
|
|
|
|
|
|
# get test acc and loss
|
|
|
|
|
acc = numpy.array(acc_set).mean()
|
|
|
|
|
avg_cost = numpy.array(avg_cost_set).mean()
|
|
|
|
|
|
|
|
|
|
print("avg_cost: %s" % avg_cost)
|
|
|
|
|
print("acc : %s" % acc)
|
|
|
|
|
|
|
|
|
|
if float(acc) > 0.2: # Smaller value to increase CI speed
|
|
|
|
|
trainer.save_params(save_dirname)
|
|
|
|
|
else:
|
|
|
|
|
print('BatchID {0}, Test Loss {1:0.2}, Acc {2:0.2}'.format(
|
|
|
|
|
event.epoch + 1, float(avg_cost), float(acc)))
|
|
|
|
|
if math.isnan(float(avg_cost)):
|
|
|
|
|
sys.exit("got NaN loss, training failed.")
|
|
|
|
|
|
|
|
|
|
train_reader = paddle.batch(
|
|
|
|
|
paddle.reader.shuffle(
|
|
|
|
|
@ -108,10 +100,11 @@ def train(use_cuda, save_dirname):
|
|
|
|
|
feed_order=['img', 'label'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def infer(use_cuda, save_dirname=None):
|
|
|
|
|
def infer(use_cuda, inference_program, save_dirname=None):
|
|
|
|
|
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
|
|
|
|
|
|
|
|
|
|
inferencer = fluid.Inferencer(param_path=save_dirname, place=place)
|
|
|
|
|
inferencer = fluid.Inferencer(
|
|
|
|
|
infer_func=inference_program, param_path=save_dirname, place=place)
|
|
|
|
|
|
|
|
|
|
batch_size = 1
|
|
|
|
|
tensor_img = numpy.random.uniform(-1.0, 1.0,
|
|
|
|
|
@ -126,8 +119,14 @@ def main(use_cuda):
|
|
|
|
|
save_dirname = "recognize_digits_conv.inference.model"
|
|
|
|
|
|
|
|
|
|
# call train() with is_local argument to run distributed train
|
|
|
|
|
train(use_cuda=use_cuda, save_dirname=save_dirname)
|
|
|
|
|
infer(use_cuda=use_cuda, save_dirname=save_dirname)
|
|
|
|
|
train(
|
|
|
|
|
use_cuda=use_cuda,
|
|
|
|
|
train_program=train_program,
|
|
|
|
|
save_dirname=save_dirname)
|
|
|
|
|
infer(
|
|
|
|
|
use_cuda=use_cuda,
|
|
|
|
|
inference_program=inference_program,
|
|
|
|
|
save_dirname=save_dirname)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
|