def generate_gaussian_filterbank(N, M, J, f0, f1, modes=1): # gaussian parameters freqs = get_scaled_freqs(f0, f1, J) freqs *= (J - 1) * 10 if modes > 1: other_modes = np.random.randint(0, J, J * (modes - 1)) freqs = np.concatenate([freqs, freqs[other_modes]]) # crate the average vectors mu_init = np.stack([freqs, 0.1 * np.random.randn(J * modes)], 1) mu = T.Variable(mu_init.astype('float32'), name='mu') # create the covariance matrix cor = T.Variable(0.01 * np.random.randn(J * modes).astype('float32'), name='cor') sigma_init = np.stack([freqs / 6, 1. + 0.01 * np.random.randn(J * modes)], 1) sigma = T.Variable(sigma_init.astype('float32'), name='sigma') # create the mixing coefficients mixing = T.Variable(np.ones((modes, 1, 1)).astype('float32')) # now apply our parametrization coeff = T.stop_gradient(T.sqrt((T.abs(sigma) + 0.1).prod(1))) * 0.95 Id = T.eye(2) cov = Id * T.expand_dims((T.abs(sigma)+0.1),1) +\ T.flip(Id, 0) * (T.tanh(cor) * coeff).reshape((-1, 1, 1)) cov_inv = T.linalg.inv(cov) # get the gaussian filters time = T.linspace(-5, 5, M) freq = T.linspace(0, J * 10, N) x, y = T.meshgrid(time, freq) grid = T.stack([y.flatten(), x.flatten()], 1) centered = grid - T.expand_dims(mu, 1) # asdf gaussian = T.exp(-(T.matmul(centered, cov_inv)**2).sum(-1)) norm = T.linalg.norm(gaussian, 2, 1, keepdims=True) gaussian_2d = T.abs(mixing) * T.reshape(gaussian / norm, (J, modes, N, M)) return gaussian_2d.sum(1, keepdims=True), mu, cor, sigma, mixing
import os os.environ["DATASET_PATH"] = "/home/vrael/DATASETS/" symjax.current_graph().reset() mnist = symjax.data.mnist() # 2d image images = mnist["train_set/images"][mnist["train_set/labels"] == 2][:2, 0] images /= images.max() np.random.seed(0) coordinates = T.meshgrid(T.range(28), T.range(28)) coordinates = T.Variable( T.stack([coordinates[1].flatten(), coordinates[0].flatten()]).astype("float32") ) interp = T.interpolation.map_coordinates(images[0], coordinates, order=1).reshape( (28, 28) ) loss = ((interp - images[1]) ** 2).mean() lr = symjax.nn.schedules.PiecewiseConstant(0.05, {5000: 0.01, 8000: 0.005}) symjax.nn.optimizers.Adam(loss, lr) train = symjax.function(outputs=loss, updates=symjax.get_updates()) rec = symjax.function(outputs=interp)
import sys sys.path.insert(0, "../") import symjax as sj import symjax.tensor as T import matplotlib.pyplot as plt import matplotlib matplotlib.use('Agg') ###### 2D GAUSSIAN EXAMPLE t = T.linspace(-5, 5, 5) x, y = T.meshgrid(t, t) X = T.stack([x.flatten(), y.flatten()], 1) p = T.pdfs.multivariate_normal.pdf(X, T.zeros(2), T.eye(2)) p = p.reshape((5, 5)).round(2) print(p) # Tensor(Op=round_, shape=(5, 5), dtype=float32) # lazy evaluation (not compiled nor optimized) print(p.get()) # [[0. 0. 0. 0. 0. ] # [0. 0. 0.01 0. 0. ] # [0. 0.01 0.16 0.01 0. ] # [0. 0. 0.01 0. 0. ] # [0. 0. 0. 0. 0. ]] # create the function which internall compiles and optimizes
sys.path.insert(0, "../") import symjax import symjax.tensor as T import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.use("Agg") ###### DERIVATIVE OF GAUSSIAN EXAMPLE t = T.Placeholder((1000, ), "float32") print(t) f = T.meshgrid(t, t) f = T.exp(-(t**2)) u = f.sum() g = symjax.gradients(u, [t]) g2 = symjax.gradients(g[0].sum(), [t]) g3 = symjax.gradients(g2[0].sum(), [t]) dog = symjax.function(t, outputs=[g[0], g2[0], g3[0]]) plt.plot(np.array(dog(np.linspace(-10, 10, 1000))).T) ###### GRADIENT DESCENT z = T.Variable(3.0) loss = z**2 g_z = symjax.gradients(loss, [z]) print(loss, z)