You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.9 KiB
96 lines
2.9 KiB
import unittest
|
|
|
|
import paddle.v2.framework.core as core
|
|
from paddle.v2.framework.framework import Program
|
|
from paddle.v2.framework.framework import g_program
|
|
|
|
|
|
class TestProgram(unittest.TestCase):
|
|
def test_program(self):
|
|
b = g_program.current_block()
|
|
self.assertEqual(-1, b.parent_idx)
|
|
self.assertEqual(0, b.idx)
|
|
|
|
b = g_program.create_block()
|
|
self.assertEqual(1, b.idx)
|
|
self.assertEqual(0, b.parent_idx)
|
|
|
|
b = g_program.create_block()
|
|
self.assertEqual(2, b.idx)
|
|
self.assertEqual(1, b.parent_idx)
|
|
|
|
g_program.rollback()
|
|
|
|
b = g_program.current_block()
|
|
self.assertEqual(1, b.idx)
|
|
self.assertEqual(0, b.parent_idx)
|
|
|
|
b = g_program.create_block()
|
|
self.assertEqual(3, b.idx)
|
|
self.assertEqual(1, b.parent_idx)
|
|
|
|
g_program.rollback()
|
|
b = g_program.current_block()
|
|
self.assertEqual(1, b.idx)
|
|
self.assertEqual(0, b.parent_idx)
|
|
|
|
def test_desc_append_backward(self):
|
|
prog = core.ProgramDesc.__create_program_desc__()
|
|
self.assertIsNotNone(prog)
|
|
block = prog.block(0)
|
|
self.assertIsNotNone(block)
|
|
|
|
mul_op_desc = block.append_op()
|
|
mul_op_desc.set_type("mul")
|
|
mul_op_desc.set_input("X", ["x1"])
|
|
mul_op_desc.set_input("Y", ["y1"])
|
|
mul_op_desc.set_output("Out", ["out1"])
|
|
|
|
sum_op_desc = block.append_op()
|
|
sum_op_desc.set_type("elementwise_add")
|
|
sum_op_desc.set_input("X", ["out1"])
|
|
sum_op_desc.set_input("Y", ["b1"])
|
|
sum_op_desc.set_output("Out", ["out2"])
|
|
|
|
target = block.var("out2")
|
|
|
|
expect_ops = [
|
|
"mul", "elementwise_add", "fill_constant", "elementwise_add_grad",
|
|
"mul_grad"
|
|
]
|
|
|
|
def grad_name(name):
|
|
return name + "@GRAD"
|
|
|
|
actual_ops = []
|
|
param_to_grad = prog.append_backward(target, set())
|
|
for var_name in ("x1", "y1", "out1", "b1"):
|
|
self.assertEqual(param_to_grad[var_name][0], grad_name(var_name))
|
|
self.assertEqual(param_to_grad[var_name][1], 0)
|
|
|
|
for op in block.all_ops():
|
|
actual_ops.append(op.type())
|
|
self.assertEqual(actual_ops, expect_ops)
|
|
|
|
def test_append_backward(self):
|
|
prog = Program.instance()
|
|
block = prog.global_block()
|
|
|
|
mul_x = block.create_parameter(
|
|
dtype="float32", shape=[5, 10], lod_level=0, name="mul.x")
|
|
mul_y = block.create_var(
|
|
dtype="float32", shape=[10, 8], lod_level=0, name="mul.y")
|
|
mul_out = block.create_var(
|
|
dtype="float32", shape=[5, 8], lod_level=0, name="mul.out")
|
|
mul_op = block.append_op(
|
|
type="mul",
|
|
inputs={"X": [mul_x],
|
|
"Y": mul_y},
|
|
outputs={"Out": [mul_out]},
|
|
attrs={"x_num_col_dims": 1})
|
|
param_to_grad = prog.append_backward(mul_out, set())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|