|
|
@ -120,10 +120,8 @@ class SGD(ITrainer):
|
|
|
|
for each_param in self.__gradient_machine__.getNonStaticParameters(
|
|
|
|
for each_param in self.__gradient_machine__.getNonStaticParameters(
|
|
|
|
):
|
|
|
|
):
|
|
|
|
updater.update(each_param)
|
|
|
|
updater.update(each_param)
|
|
|
|
# Get cost. We use numpy to calculate total cost for this batch.
|
|
|
|
cost_sum = out_args.sumCosts()
|
|
|
|
cost_vec = out_args.getSlotValue(0)
|
|
|
|
cost = cost_sum / len(data_batch)
|
|
|
|
cost_vec = cost_vec.copyToNumpyMat()
|
|
|
|
|
|
|
|
cost = cost_vec.sum() / len(data_batch)
|
|
|
|
|
|
|
|
updater.finishBatch(cost)
|
|
|
|
updater.finishBatch(cost)
|
|
|
|
batch_evaluator.finish()
|
|
|
|
batch_evaluator.finish()
|
|
|
|
event_handler(
|
|
|
|
event_handler(
|
|
|
@ -152,13 +150,18 @@ class SGD(ITrainer):
|
|
|
|
evaluator = self.__gradient_machine__.makeEvaluator()
|
|
|
|
evaluator = self.__gradient_machine__.makeEvaluator()
|
|
|
|
out_args = api.Arguments.createArguments(0)
|
|
|
|
out_args = api.Arguments.createArguments(0)
|
|
|
|
evaluator.start()
|
|
|
|
evaluator.start()
|
|
|
|
|
|
|
|
total_cost = 0
|
|
|
|
|
|
|
|
num_samples = 0.0
|
|
|
|
for data_batch in reader():
|
|
|
|
for data_batch in reader():
|
|
|
|
|
|
|
|
num_samples += len(data_batch)
|
|
|
|
self.__gradient_machine__.forward(
|
|
|
|
self.__gradient_machine__.forward(
|
|
|
|
feeder(data_batch), out_args, api.PASS_TEST)
|
|
|
|
feeder(data_batch), out_args, api.PASS_TEST)
|
|
|
|
|
|
|
|
total_cost += out_args.sumCosts()
|
|
|
|
self.__gradient_machine__.eval(evaluator)
|
|
|
|
self.__gradient_machine__.eval(evaluator)
|
|
|
|
|
|
|
|
|
|
|
|
evaluator.finish()
|
|
|
|
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):
|
|
|
|
def __check_train_args__(reader, event_handler, **kwargs):
|
|
|
|