This tutorial shows how to compute wino_f23:
- define transform matrix
G_F23 = np.array([ [ 1.0, 0.0, 0.0 ], [ 0.5, 0.5, 0.5 ], [ 0.5, -0.5, 0.5 ], [ 0.0, 0.0, 1.0 ]]) Bt_F23 = np.array([ [ 1.0, 0.0, -1.0, 0.0 ], [ 0.0, 1.0, 1.0, 0.0 ], [ 0.0, -1.0, 1.0, 0.0 ], [ 0.0, 1.0, 0.0, -1.0 ]]) At_F23 = np.array([ [ 1.0, 1.0, 1.0, 0.0 ], [ 0.0, 1.0, -1.0, -1.0 ]])
- compute transformation for input, kernel, output
def trans_kernel(g): return np.dot(np.dot(G_F23,g),G_F23.T) def trans_input(d): return np.dot(np.dot(Bt_F23,d),Bt_F23.T) def trans_output(r): return np.dot(np.dot(At_F23,r),At_F23.T)
- do conv_winof23, conv_direct
def wino_f23(kernel,input): tran_inp = trans_input(input) tran_ker = trans_kernel(kernel) mid = tran_inp * tran_ker out = trans_output(mid) return out def conv_direct(kernel,input):