def test_matmul_var_and_param():
x2 = ad.Variable(name="x2")
w2_val = np.array([[7, 8, 9], [10, 11, 12]]) # 2x3
w2 = ad.Parameter(name="w2", init=w2_val)
y = ad.matmul(x2, w2)
grad_x2, grad_w2 = ad.gradients(y, [x2, w2])
executor = ad.Executor([y, grad_x2, grad_w2])
x2_val = np.array([[1, 2], [3, 4], [5, 6]]) # 3x2
y_val, grad_x2_val, grad_w2_val = executor.run(feed_shapes={x2: x2_val})
expected_yval = np.matmul(x2_val, w2_val)
expected_grad_x2_val = np.matmul(np.ones_like(expected_yval), np.transpose(w2_val))
expected_grad_x3_val = np.matmul(np.transpose(x2_val), np.ones_like(expected_yval))
assert isinstance(y, ad.Node)
# assert np.array_equal(y_val, expected_yval)
# assert np.array_equal(grad_x2_val, expected_grad_x2_val)
# assert np.array_equal(grad_w2_val, expected_grad_x3_val)
评论列表
文章目录