提交 6cb78c6e 编写于 作者: Y Yu Yang 提交者: GitHub

Merge pull request #1519 from reyoung/feature/add_testing_cost

Add testing cost.
......@@ -30,10 +30,11 @@ def main():
result = trainer.test(reader=paddle.reader.batched(
paddle.dataset.mnist.test(), batch_size=256))
print "Pass %d, Batch %d, Cost %f, %s, Testing metrics %s" % (
event.pass_id, event.batch_id, event.cost, event.metrics,
result.metrics)
print "Pass %d, Batch %d, Cost %.2f, %s\n" \
"Testing cost %.2f metrics %s" % (
event.pass_id, event.batch_id, event.cost,
event.metrics,
result.cost, result.metrics)
else:
pass
......
......@@ -34,8 +34,9 @@ class WithMetric(object):
class TestResult(WithMetric):
def __init__(self, evaluator):
def __init__(self, evaluator, cost):
super(TestResult, self).__init__(evaluator)
self.cost = cost
class BeginPass(object):
......
......@@ -120,10 +120,8 @@ class SGD(ITrainer):
for each_param in self.__gradient_machine__.getNonStaticParameters(
):
updater.update(each_param)
# Get cost. We use numpy to calculate total cost for this batch.
cost_vec = out_args.getSlotValue(0)
cost_vec = cost_vec.copyToNumpyMat()
cost = cost_vec.sum() / len(data_batch)
cost_sum = out_args.sumCosts()
cost = cost_sum / len(data_batch)
updater.finishBatch(cost)
batch_evaluator.finish()
event_handler(
......@@ -152,13 +150,18 @@ class SGD(ITrainer):
evaluator = self.__gradient_machine__.makeEvaluator()
out_args = api.Arguments.createArguments(0)
evaluator.start()
total_cost = 0
num_samples = 0.0
for data_batch in reader():
num_samples += len(data_batch)
self.__gradient_machine__.forward(
feeder(data_batch), out_args, api.PASS_TEST)
total_cost += out_args.sumCosts()
self.__gradient_machine__.eval(evaluator)
evaluator.finish()
return v2_event.TestResult(evaluator=evaluator)
return v2_event.TestResult(
evaluator=evaluator, cost=total_cost / num_samples)
def __check_train_args__(reader, event_handler, **kwargs):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册