In [25]:
import OVFM.Model as mdl
import OVFM.FeatureMap as fm
import OVFM.DataGeneration as dg
import OVFM.Risk as rsk
import OVFM.LearningRate as lr
import OVFM.SGD as sgd
import OVFM.FISTA as fista
import numpy as np
import scipy
In [26]:
def grad_model_coord( feature, model, coord ):
return model.Jacobian( feature.reshape( ( 1, feature.shape[ 0 ] ) ) )[ :, coord, : ]
def model_coord( feature, model, coord ):
return model( feature.reshape( ( 1, feature.shape[ 0 ] ) ) )[ :, coord ]
In [31]:
n = 1
d = 4
D = 1000
p = 7
A = np.random.rand( p, p )
A = np.dot( A, A.T ) / np.linalg.norm( A ) ** 2
features = dg.generate_inputs( n, d, 'cube' )
model = mdl.Model( fm.DecomposableFF( 1.0 / d, d, D, A ) )
targets = dg.generate_outputs( features, model )
print 'Decomposable'
print 'x0 =', features[ 0, : ]
for i in xrange( 0, p ):
print 'dh_%s/dx (x0) = ' % i, scipy.optimize.check_grad( model_coord, grad_model_coord, features[ 0, : ], model, i )
In [32]:
n = 1
d = 4
D = 1000
p = d
features = dg.generate_inputs( n, d, 'cube' )
model = mdl.Model( fm.CurlFreeFF( 1.0 / d, d, D ) )
targets = dg.generate_outputs( features, model )
print 'Curl Free'
print 'x0 =', features[ 0, : ]
for i in xrange( 0, p ):
print 'dh_%s/dx (x0) = ' % i, scipy.optimize.check_grad( model_coord, grad_model_coord, features[ 0, : ], model, i )
In [33]:
n = 1
d = 4
D = 1000
p = d
features = dg.generate_inputs( n, d, 'cube' )
model = mdl.Model( fm.DivFreeFF( 1.0 / d, d, D ) )
targets = dg.generate_outputs( features, model )
print 'Divergence Free'
print 'x0 =', features[ 0, : ]
for i in xrange( 0, p ):
print 'dh_%s/dx (x0) = ' % i, scipy.optimize.check_grad( model_coord, grad_model_coord, features[ 0, : ], model, i )
In [35]:
n = 1
d = 4
D = 1000
p = d
features = dg.generate_inputs( n, d, 'cube' )
model = mdl.Model( fm.TransformableFF( 1.0 / d, d, D ) )
targets = dg.generate_outputs( features, model )
print 'Transformable'
print 'x0 =', features[ 0, : ]
for i in xrange( 0, p ):
print 'dh_%s/dx (x0) = ' % i, scipy.optimize.check_grad( model_coord, grad_model_coord, features[ 0, : ], model, i )
In [51]:
n = 1
d = 4
D = 1000
p = 4
A = 2 * np.random.rand( p, p ) - 1
A = np.dot( A, A.T ) / np.linalg.norm( A ) ** 2
P = np.zeros( ( p, d, d ) )
for i in xrange( 0, p ):
P[ i, :, : ] = 2 * np.random.rand( d, d ) - 1
features = dg.generate_inputs( n, d, 'cube' )
model = mdl.Model( fm.DeepTransformableFF( 1.0 / d, d, D, P, A ) )
targets = dg.generate_outputs( features, model )
print 'Deep Transformable'
print 'x0 =', features[ 0, : ]
for i in xrange( 0, p ):
print 'dh_%s/dx (x0) = ' % i, scipy.optimize.check_grad( model_coord, grad_model_coord, features[ 0, : ], model, i )
In [51]:
In [ ]: