def Q8(A, b): A_node = nn.Input("A") x = nn.Input("x") b_node = nn.Input("b") expression = A_node * x + b_node cc = expression.compile(golden.Builder()) return cc(A=A, b=b)
def grade_Q9(): x = np.random.rand(100, 100) y = prj01.Q9(8).compile(golden.Builder())(x=x) x2 = prj01.Q3(x, x) x4 = prj01.Q3(x2, x2) x8 = prj01.Q3(x4, x4) return np.allclose(y, x8)
def grade_Q8(): relu = nn.ReLU() flatten = nn.Flatten() f1 = nn.Linear("f1", 28 * 28, 100) f2 = nn.Linear("f2", 100, 10) x = nn.Input2d("images", 28, 28, 1) x = flatten(x) x = f2(relu(f1(x))) x.resolve(np.load("msimple_params.npz")) mnist_test = np.load("mnist_test.npz") images = mnist_test["images"][:1000] infer0 = x.compile(golden.Builder()) infer1 = x.compile(cpp.Builder()) label0 = infer0(images=images).argmax(axis=1) label1 = infer1(images=images).argmax(axis=1) return np.allclose(label0, label1)
def grade_Q4(): relu = nn.ReLU() flatten = nn.Flatten() f1 = nn.Linear("f1", 28 * 28, 32) f2 = nn.Linear("f2", 32, 10) x = nn.Input2d("images", 28, 28, 1) x = flatten(x) x = f2(relu(f1(x))) x.resolve(np.load("p5_params.npz")) mnist_test = np.load("mnist_test.npz") images = mnist_test["images"] labels = mnist_test["labels"] infer = x.compile(golden.Builder()) pred_labels = infer(images=images).argmax(axis=1) count = sum(labels == pred_labels) return count > 9500
def grade_Q4(): pool = nn.MaxPool2d(2, 2) relu = nn.ReLU() flatten = nn.Flatten() x = nn.Input2d("images", 28, 28, 1) c1 = nn.Conv2d("c1", 1, 8, 5) # 28->24 x = pool(relu(c1(x))) # 24->12 c2 = nn.Conv2d("c2", 8, 8, 5) # 12->8 x = pool(relu(c2(x))) # 8->4 f = nn.Linear("f", 8*4*4, 10) x = f(flatten(x)) x.resolve(np.load("p6_params.npz")) mnist_test = np.load("mnist_test.npz") images = mnist_test["images"] labels = mnist_test["labels"] infer = x.compile(golden.Builder()) pred_labels = infer(images = images).argmax(axis = 1) count = sum(labels == pred_labels) return count > 9500
def grade_Q10(): pool = nn.MaxPool2d(2, 2) relu = nn.ReLU() flatten = nn.Flatten() x = nn.Input2d("images", 28, 28, 1) c1 = nn.Conv2d("c1", 1, 8, 3) # 28->26 c2 = nn.Conv2d("c2", 8, 8, 3) # 26->24 x = pool(relu(c2(relu(c1(x))))) # 24->12 c3 = nn.Conv2d("c3", 8, 16, 3) # 12->10 c4 = nn.Conv2d("c4", 16, 16, 3) # 10->8 x = pool(relu(c4(relu(c3(x))))) # 8->4 f = nn.Linear("f", 16 * 4 * 4, 10) x = f(flatten(x)) x.resolve(np.load("mnist_params.npz")) mnist_test = np.load("mnist_test.npz") images = mnist_test["images"][:1000] infer0 = x.compile(golden.Builder()) infer1 = x.compile(cpp.Builder()) label0 = infer0(images=images).argmax(axis=1) label1 = infer1(images=images).argmax(axis=1) return np.allclose(label0, label1)
def is_same(p, n, **kwargs): e0 = p.compile(golden.Builder()) e1 = p.compile(cpp.Builder()) nkwargs = [random_kwargs(kwargs) for i in range(n)] return all( [np.allclose(e0(**nkwargs[i]), e1(**nkwargs[i])) for i in range(n)])
def grade_Q8(): A = np.random.rand(100, 100) x = np.random.rand(100, 1) b = np.random.rand(100, 1) y = prj01.Q8(A, b).compile(golden.Builder())(x=x) return np.allclose(y, prj01.Q2(prj01.Q3(A, x), b))
def grade_Q7(): a = np.random.rand(100, 50) b = np.random.rand(100, 10) c = np.random.rand(10, 50) d = prj01.Q7().compile(golden.Builder())(a=a, b=b, c=c) return np.allclose(d, prj01.Q2(a, prj01.Q3(b, c)))
def grade_Q6(): a = np.random.rand(100, 10) b = np.random.rand(100, 10) c = prj01.Q6().compile(golden.Builder())(a=a, b=b) return np.allclose(c, prj01.Q2(a, b))
def grade_Q10(): x = np.random.randn(100, 100) y = prj01.Q10().compile(golden.Builder())(x=x) return np.allclose(y, np.abs(x))