本文整理汇总了Python中pylearn2.optimization.batch_gradient_descent.BatchGradientDescent.minimize方法的典型用法代码示例。如果您正苦于以下问题:Python BatchGradientDescent.minimize方法的具体用法?Python BatchGradientDescent.minimize怎么用?Python BatchGradientDescent.minimize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pylearn2.optimization.batch_gradient_descent.BatchGradientDescent
的用法示例。
在下文中一共展示了BatchGradientDescent.minimize方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_zero_optimal
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
def test_zero_optimal(self):
""" minimizes the kl divergence between q and p
using batch gradient descent and checks that
the result is zero"""
rng = np.random.RandomState([1,2,3])
dim = self.dim
num_trials = 3
mu = rng.randn(dim).astype(floatX)
beta = rng.uniform(.1,10.,(dim,)).astype(floatX)
self.p.mu.set_value(mu)
mu = rng.randn(dim).astype(floatX)
self.q.mu.set_value(mu)
self.p.beta.set_value(beta)
beta = rng.uniform(.1,10.,(dim,)).astype(floatX)
self.q.beta.set_value(beta)
kl = kl_divergence(self.q,self.p)
p = self.p
q = self.q
optimizer = BatchGradientDescent(
max_iter = 100,
line_search_mode = 'exhaustive',
verbose = True,
objective = kl,
conjugate = True,
params = [ p.mu, p.beta, q.mu, q.beta ],
param_constrainers = [ p.censor_updates,
q.censor_updates ])
#optimizer.verbose = True
kl = optimizer.minimize()
if kl < 0.:
if config.floatX == 'float32':
neg_tol = 4.8e-7
else:
neg_tol = 0.
if kl < - neg_tol:
raise AssertionError("KL divergence should "
"be non-negative but is "+
str(kl))
warnings.warn("KL divergence is not very numerically stable, evidently")
tol = 6e-5
if kl > tol:
print 'kl:',kl
print 'tol:',tol
assert kl <= tol
assert not (kl > tol )
示例2: fit
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
def fit(self, params=None, l1=.0, l2=.0):
"""
Fit the model by minimizing the Leave One Out (LOO) loss using gradient-based optimization.
"""
loo_loss = self.loss_symbolic(self.L, self.y, self.mu, self.R, self.eta, self.eps)
if params is None:
params = [self.eta]
# Symbolic Theano variables that represent the L1 and L2 regularization terms
L1, L2 = .0, .0
for param in params:
L1 += T.sum(abs(param))
L2 += T.sum(param ** 2)
regularized_loo_loss = loo_loss + l1 * L1 + l2 * L2
minimizer = BatchGradientDescent(objective=regularized_loo_loss, params=params, inputs=[], verbose=1)
minimizer.minimize()
示例3: test_zero_optimal
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
def test_zero_optimal(self):
""" minimizes the kl divergence between q and p
using batch gradient descent and checks that
the result is zero"""
rng = np.random.RandomState([1,2,3])
dim = self.dim
num_trials = 3
mu = rng.randn(dim).astype(floatX)
beta = rng.uniform(.1,10.,(dim,)).astype(floatX)
self.p.mu.set_value(mu)
mu = rng.randn(dim).astype(floatX)
self.q.mu.set_value(mu)
self.p.beta.set_value(beta)
beta = rng.uniform(.1,10.,(dim,)).astype(floatX)
self.q.beta.set_value(beta)
kl = kl_divergence(self.q,self.p)
p = self.p
q = self.q
optimizer = BatchGradientDescent(
objective = kl,
params = [ p.mu, p.beta, q.mu, q.beta ],
param_constrainers = [ p.censor_updates,
q.censor_updates ])
#optimizer.verbose = True
kl = optimizer.minimize()
if kl < 0.:
raise AssertionError("KL divergence should "
"be non-negative but is "+
str(kl))
tol = 5.4e-5
assert kl <= tol
assert not (kl > tol )
示例4: BGD
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
#.........这里部分代码省略.........
name='ave_grad_size',
ipt=None,
val=self.optimizer.ave_grad_size,
data_specs=(NullSpace(), ''),
dataset=self.monitoring_dataset.values()[0])
self.monitor.add_channel(
name='ave_grad_mult',
ipt=None,
val=self.optimizer.ave_grad_mult,
data_specs=(NullSpace(), ''),
dataset=self.monitoring_dataset.values()[0])
self.first = True
self.bSetup = True
def train(self, dataset):
"""
.. todo::
WRITEME
"""
assert self.bSetup
model = self.model
rng = self.rng
train_iteration_mode = 'shuffled_sequential'
if not is_stochastic(train_iteration_mode):
rng = None
data_specs = self.cost.get_data_specs(self.model)
# The iterator should be built from flat data specs, so it returns
# flat, non-redundent tuples of data.
mapping = DataSpecsMapping(data_specs)
space_tuple = mapping.flatten(data_specs[0], return_tuple=True)
source_tuple = mapping.flatten(data_specs[1], return_tuple=True)
if len(space_tuple) == 0:
# No data will be returned by the iterator, and it is impossible
# to know the size of the actual batch.
# It is not decided yet what the right thing to do should be.
raise NotImplementedError("Unable to train with BGD, because "
"the cost does not actually use data from the data set. "
"data_specs: %s" % str(data_specs))
flat_data_specs = (CompositeSpace(space_tuple), source_tuple)
iterator = dataset.iterator(mode=train_iteration_mode,
batch_size=self.batch_size,
num_batches=self.batches_per_iter,
data_specs=flat_data_specs, return_tuple=True,
rng = rng)
mode = self.theano_function_mode
for data in iterator:
if ('targets' in source_tuple and mode is not None
and hasattr(mode, 'record')):
Y = data[source_tuple.index('targets')]
stry = str(Y).replace('\n',' ')
mode.record.handle_line('data Y '+stry+'\n')
for on_load_batch in self.on_load_batch:
on_load_batch(mapping.nest(data))
self.before_step(model)
self.optimizer.minimize(*data)
self.after_step(model)
actual_batch_size = flat_data_specs[0].np_batch_size(data)
model.monitor.report_batch(actual_batch_size)
def continue_learning(self, model):
"""
.. todo::
WRITEME
"""
if self.termination_criterion is None:
return True
else:
rval = self.termination_criterion.continue_learning(self.model)
assert rval in [True, False, 0, 1]
return rval
def before_step(self, model):
"""
.. todo::
WRITEME
"""
if self.scale_step != 1.:
self.params = list(model.get_params())
self.value = [ param.get_value() for param in self.params ]
def after_step(self, model):
"""
.. todo::
WRITEME
"""
if self.scale_step != 1:
for param, value in safe_zip(self.params, self.value):
value = (1.-self.scale_step) * value + self.scale_step * param.get_value()
param.set_value(value)
示例5: test_batch_gradient_descent
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
def test_batch_gradient_descent():
""" Verify that batch gradient descent works by checking that
it minimizes a quadratic function f(x) = x^T A x + b^T x + c
correctly for several sampled values of A, b, and c.
The ground truth minimizer is x = np.linalg.solve(A,-b)"""
n = 3
A = T.matrix(name = 'A')
b = T.vector(name = 'b')
c = T.scalar(name = 'c')
x = sharedX( np.zeros((n,)) , name = 'x')
half = np.cast[config.floatX](0.5)
obj = half * T.dot(T.dot(x,A),x)+T.dot(b,x)+c
minimizer = BatchGradientDescent(
objective = obj,
params = [ x],
inputs = [ A, b, c])
num_samples = 3
rng = np.random.RandomState([1,2,3])
for i in xrange(num_samples):
A = np.cast[config.floatX](rng.randn(1.5*n,n))
A = np.cast[config.floatX](np.dot(A.T,A))
A += np.cast[config.floatX](np.identity(n) * .02)
b = np.cast[config.floatX](rng.randn(n))
c = np.cast[config.floatX](rng.randn())
x.set_value(np.cast[config.floatX](rng.randn(n)))
analytical_x = np.linalg.solve(A,-b)
actual_obj = minimizer.minimize(A,b,c)
actual_x = x.get_value()
#Check that the value returned by the minimize method
#is the objective function value at the parameters
#chosen by the minimize method
cur_obj = minimizer.obj(A,b,c)
assert np.allclose(actual_obj, cur_obj)
x.set_value(analytical_x)
analytical_obj = minimizer.obj(A,b,c)
#make sure the objective function is accurate to first 4 digits
condition1 = not np.allclose(analytical_obj, actual_obj)
condition2 = np.abs(analytical_obj-actual_obj) >= 1e-4 * np.abs(analytical_obj)
if (config.floatX == 'float64' and condition1) \
or (config.floatX == 'float32' and condition2):
print 'objective function value came out wrong on sample ',i
print 'analytical obj', analytical_obj
print 'actual obj',actual_obj
"""
The following section of code was used to verify that numerical
error can make the objective function look non-convex
print 'Checking for numerically induced non-convex behavior'
def f(x):
return 0.5 * np.dot(x,np.dot(A,x)) + np.dot(b,x) + c
x.set_value(actual_x)
minimizer._compute_grad(A,b,c)
minimizer._normalize_grad()
d = minimizer.param_to_grad_shared[x].get_value()
x = actual_x.copy()
prev = f(x)
print prev
step_size = 1e-4
x += step_size * d
cur = f(x)
print cur
cur_sgn = np.sign(cur-prev)
flip_cnt = 0
for i in xrange(10000):
x += step_size * d
prev = cur
cur = f(x)
print cur
prev_sgn = cur_sgn
cur_sgn = np.sign(cur-prev)
if cur_sgn != prev_sgn:
print 'flip'
flip_cnt += 1
if flip_cnt > 1:
print "Non-convex!"
from matplotlib import pyplot as plt
y = []
x = actual_x.copy()
for j in xrange(10000):
y.append(f(x))
#.........这里部分代码省略.........
示例6: sum
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
for Y_i in Y:
pos_prob = 1./(1.+T.exp(model.free_energy(X)-model.free_energy(Y_i)))
acc = (pos_prob > .5).mean()
accs.append(acc)
acc = sum(accs) / float(len(accs))
print '\tinit accuracy ',function([],acc)()
#Minimize the objective function with batch gradient descent
minimizer = BatchGradientDescent( objective = J,
params = model.get_params(),
param_constrainers = [ model.censor_updates ])
print '\tinit obj:',minimizer.obj()
#minimizer.verbose = True
minimizer.minimize()
print '\tfinal obj:',minimizer.obj()
recovered_beta = model.beta.get_value()
recovered_mu = model.mu.get_value()
print '\trecovered beta:',recovered_beta
print '\trecovered mu:',recovered_mu
kl = kl_divergence(true, model)
kl = function([],kl)()
assert kl >= 0.0
print '\tkl was ',kl
print '\tfinal accuracy ',function([],acc)()
kls[trial,idx1] = kl
示例7: BGD
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
#.........这里部分代码省略.........
self.monitor.add_channel(name= prefix + name,
ipt=ipt,
val=J,
dataset = monitoring_dataset,
prereqs=prereqs)
if self.cost.supervised:
ipts = [X, Y]
else:
ipts = [X]
params = model.get_params()
self.optimizer = BatchGradientDescent(
objective = obj,
gradients = grads,
gradient_updates = grad_updates,
params = params,
param_constrainers = [ model.censor_updates ],
lr_scalers = model.get_lr_scalers(),
inputs = ipts,
verbose = self.verbose_optimization,
max_iter = self.updates_per_batch,
reset_alpha = self.reset_alpha,
conjugate = self.conjugate,
reset_conjugate = self.reset_conjugate,
min_init_alpha = self.min_init_alpha,
line_search_mode = self.line_search_mode,
theano_function_mode=self.theano_function_mode,
init_alpha=self.init_alpha)
if self.monitoring_dataset is not None:
self.monitor.add_channel(name='ave_step_size',
ipt=ipt, val = self.optimizer.ave_step_size, dataset=self.monitoring_dataset.values()[0])
self.monitor.add_channel(name='ave_grad_size',
ipt=ipt, val = self.optimizer.ave_grad_size, dataset=self.monitoring_dataset.values()[0])
self.monitor.add_channel(name='ave_grad_mult',
ipt=ipt, val = self.optimizer.ave_grad_mult, dataset=self.monitoring_dataset.values()[0])
self.first = True
self.bSetup = True
def train(self, dataset):
assert self.bSetup
model = self.model
batch_size = self.batch_size
if self.topo:
get_data = dataset.get_batch_topo
else:
get_data = dataset.get_batch_design
rng = self.rng
train_iteration_mode = 'shuffled_sequential'
if not is_stochastic(train_iteration_mode):
rng = None
iterator = dataset.iterator(mode=train_iteration_mode,
batch_size=self.batch_size,
targets=self.cost.supervised,
num_batches=self.batches_per_iter,
topo=self.topo,
rng = rng)
for data in iterator:
if self.cost.supervised:
args = data
X, Y = data
mode = self.theano_function_mode
if mode is not None and hasattr(mode, 'record'):
stry = str(Y).replace('\n',' ')
mode.record.handle_line('data Y '+stry+'\n')
for on_load_batch in self.on_load_batch:
on_load_batch(X, Y)
else:
args = [ data ]
X = data
for on_load_batch in self.on_load_batch:
on_load_batch(X, None)
self.before_step(model)
self.optimizer.minimize(*args)
self.after_step(model)
model.monitor.report_batch( X.shape[0] )
def continue_learning(self, model):
if self.termination_criterion is None:
return True
else:
return self.termination_criterion(self.model)
def before_step(self, model):
if self.scale_step != 1.:
self.params = list(model.get_params())
self.value = [ param.get_value() for param in self.params ]
def after_step(self, model):
if self.scale_step != 1:
for param, value in safe_zip(self.params, self.value):
value = (1.-self.scale_step) * value + self.scale_step * param.get_value()
param.set_value(value)
示例8: WarmStart
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
#.........这里部分代码省略.........
print "!!!!!!!! FITTING THE QUADRATIC FUNCTION !!!!!!!!!!!!!!!!!!!"
if not hasattr(self, 'fit_quad'):
points = sharedX(points)
#from theano import config
#config.compute_test_value = 'raise'
cost_values = sharedX(cost_values)
A = sharedX(np.zeros((self.num_basis_vectors, self.num_basis_vectors)))
if self.psd:
mat = T.dot(A.T, A)
else:
mat = A
b = sharedX(np.zeros(self.num_basis_vectors))
c = sharedX(0.)
half_quad = T.dot(points, mat)
quad = (points * half_quad).sum(axis=1)
lin = T.dot(points, b)
pred = quad + lin + c
from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent
mse = T.square(pred - cost_values).mean()
mae = abs(pred - cost_values).mean()
obj = locals()[self.fitting_cost]
fit_quad = BatchGradientDescent(obj, params = [A, b, c],
max_iter = self.num_basis_vectors ** 2,
verbose = 3, tol = None,
init_alpha = None, min_init_alpha = 1e-7,
reset_alpha = False, conjugate = True,
reset_conjugate = False,
line_search_mode = 'exhaustive')
self.fit_quad = fit_quad
self.A = A
self.b = b
self.c = c
self.points = points
self.cost_values = cost_values
else:
self.A.set_value(.001 * np.identity(self.A.get_value().shape[0], dtype=self.A.dtype))
self.b.set_value(self.b.get_value() * 0.)
self.c.set_value(self.c.get_value() * 0.)
self.points.set_value(points)
self.cost_values.set_value(cost_values.astype(self.cost_values.dtype))
self.fit_quad.minimize()
print "!!!!!!!!!!!!! FINDING ITS MINIMUM !!!!!!!!!!!!!!!!!!!!!!!!!!!"
if self.use_solver:
if self.psd:
Av = self.A.get_value()
mat_v = np.dot(Av.T, Av)
else:
mat_v = self.A.get_value()
bv = self.b.get_value()
# minimize for x^T A x + b^T x + c
# -> solve 2 A x + b = 0
# Ax = - b / 2
print "********** mat_v", mat_v.min(), mat_v.max()
x, ignored_residuals, ignored_rank, ignored_singular_values = np.linalg.lstsq(mat_v, - 0.5 * bv)
print "********** soln: ", x.min(), x.mean(), x.max()
print "********** SVs: ", ignored_singular_values.min(), ignored_singular_values.max()
assert x.ndim == 1, x.shape
prod = np.dot(basis, x)
norm = np.sqrt(np.square(prod).sum())
print "*************** Moving params by ",norm
vector = root + prod
model.set_param_vector(vector)
else: # use minimizer
if not hasattr(self, 'fit_params'):
self.vector = sharedX(points.get_value().mean(axis=0))
vector = self.vector
obj = T.dot(T.dot(mat, vector), vector) + T.dot(b, vector)
def constrain(d):
assert vector in d
n = d[vector]
norm = T.sqrt(T.square(n).sum())
desired_norm = T.clip(norm, 0., self.max_jump_norm)
d[vector] = n * desired_norm / norm
self.fit_params = BatchGradientDescent(obj, params=[vector],
max_iter = self.num_basis_vectors,
verbose = 3, tol=None,
param_constrainers = [constrain],
init_alpha = None, min_init_alpha = 1e-3,
reset_alpha=False, conjugate=True, reset_conjugate=False,
line_search_mode='exhaustive')
else:
self.vector.set_value(points.mean(axis=0).astype(self.vector.dtype))
self.fit_params.minimize()
model.set_param_vector(root + np.dot(basis , self.vector.get_value()))
示例9: BatchGradientDescent
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
act = p[0,filter_idx,i,j]
obj = - act + norm_penalty * T.square(X).sum()
assert obj.ndim == 0
optimizer = BatchGradientDescent(objective = obj,
params = [X],
inputs = None,
param_constrainers = None,
max_iter = 1000,
verbose = True,
tol = None,
init_alpha = (.001, .005, .01, .05, .1))
optimizer.minimize()
img = X.get_value()[0,:,:,:]
print 'max mag: ',np.abs(img).max()
print 'norm: ',np.square(img).sum()
print 'min: ',img.min()
print 'max: ',img.max()
img /= np.abs(img).max()
img *= .5
img += 1
show(img)
示例10: DNCE_Algorithm
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
#.........这里部分代码省略.........
self.noise_per_clean = noise_per_clean
def setup(self, model, dataset):
"""
Allows the training algorithm to do some preliminary configuration
*before* we actually start training the model. The dataset is provided
in case other derived training algorithms need to modify model based on
the dataset.
Parameters
----------
model: a Python object representing the model to train loosely
implementing the interface of models.model.Model.
dataset: a pylearn2.datasets.dataset.Dataset object used to draw
training data
"""
self.model = model
self.monitor = Monitor.get_monitor(model)
X = T.matrix()
Y = T.matrix()
dnce = DNCE( self.noise)
if self.monitoring_dataset is not None:
if not self.monitoring_dataset.has_targets():
Y = None
self.monitor.set_dataset(dataset=self.monitoring_dataset,
mode="sequential",
batch_size=self.batch_size,
num_batches=self.monitoring_batches)
X.tag.test_value = self.monitoring_dataset.get_batch_design(2)
channels = model.get_monitoring_channels(X,Y)
if not isinstance(channels, dict):
raise TypeError("model.get_monitoring_channels must return a "
"dictionary, but it returned " + str(channels))
dnce.noise_per_clean = self.noise_per_clean
obj = dnce(model,X)
dnce.noise_per_clean = None
self.monitor.add_channel('DNCE',ipt=X,val=obj)
for name in channels:
J = channels[name]
if isinstance(J, tuple):
assert len(J) == 2
J, prereqs = J
else:
prereqs = None
if Y is not None:
ipt = (X,Y)
else:
ipt = X
self.monitor.add_channel(name=name,
ipt=ipt,
val=J,
prereqs=prereqs)
X = sharedX( dataset.get_batch_design(1), 'X')
Y = []
updates = {}
for i in xrange(self.noise_per_clean):
Y_i = sharedX( X.get_value().copy() )
updates[Y_i] = self.noise.random_design_matrix(X)
Y.append(Y_i)
self.update_noise = function([], updates = updates)
obj = dnce(model,X,Y)
self.optimizer = BatchGradientDescent(
objective = obj,
params = model.get_params(),
param_constrainers = [ model.censor_updates ],
max_iter = 5)
self.X = X
self.Y = Y
self.first = True
self.bSetup = True
def train(self, dataset):
assert self.bSetup
model = self.model
if self.batch_size is None:
batch_size = model.force_batch_size
else:
batch_size = self.batch_size
if hasattr(model, 'force_batch_size'):
assert (model.force_batch_size <= 0 or batch_size ==
model.force_batch_size)
for i in xrange(self.batches_per_iter):
self.X.set_value(dataset.get_batch_design(self.batch_size))
self.update_noise()
self.optimizer.minimize()
model.monitor.report_batch( batch_size )
return True
示例11: BGD
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
#.........这里部分代码省略.........
def setup(self, model, dataset):
"""
Allows the training algorithm to do some preliminary configuration
*before* we actually start training the model. The dataset is provided
in case other derived training algorithms need to modify model based on
the dataset.
Parameters
----------
model: a Python object representing the model to train loosely
implementing the interface of models.model.Model.
dataset: a pylearn2.datasets.dataset.Dataset object used to draw
training data
"""
self.model = model
if self.batch_size is None:
self.batch_size = model.force_batch_size
else:
batch_size = self.batch_size
if hasattr(model, 'force_batch_size'):
if not (model.force_batch_size <= 0 or batch_size ==
model.force_batch_size):
raise ValueError("batch_size is %d but model.force_batch_size is %d" %
(batch_size, model.force_batch_size))
self.monitor = Monitor.get_monitor(model)
X = self.model.get_input_space().make_theano_batch()
self.topo = X.ndim != 2
Y = T.matrix()
if self.monitoring_dataset is not None:
if not self.monitoring_dataset.has_targets():
Y = None
self.monitor.add_dataset(dataset=self.monitoring_dataset,
mode="sequential",
batch_size=self.batch_size,
num_batches=self.monitoring_batches)
channels = model.get_monitoring_channels(X,Y)
if not isinstance(channels, dict):
raise TypeError("model.get_monitoring_channels must return a "
"dictionary, but it returned " + str(channels))
#TODO: currently only supports unsupervised costs, support supervised too
obj = self.cost(model,X)
self.monitor.add_channel('batch_gd_objective',ipt=X,val=obj)
for name in channels:
J = channels[name]
if isinstance(J, tuple):
assert len(J) == 2
J, prereqs = J
else:
prereqs = None
if Y is not None:
ipt = (X,Y)
else:
ipt = X
self.monitor.add_channel(name=name,
ipt=ipt,
val=J,
prereqs=prereqs)
obj = self.cost(model,X)
self.optimizer = BatchGradientDescent(
objective = obj,
params = model.get_params(),
param_constrainers = [ model.censor_updates ],
lr_scalers = model.get_lr_scalers(),
inputs = [ X ],
verbose = True,
max_iter = self.updates_per_batch)
self.first = True
self.bSetup = True
def train(self, dataset):
assert self.bSetup
model = self.model
batch_size = self.batch_size
if self.topo:
get_data = dataset.get_batch_topo
else:
get_data = dataset.get_batch_design
for i in xrange(self.batches_per_iter):
X = get_data(self.batch_size)
self.optimizer.minimize(X)
model.monitor.report_batch( batch_size )
if self.termination_criterion is None:
return True
else:
return self.termination_criterion(self.model)
示例12: sharedX
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
_, model_path = sys.argv
from pylearn2.utils import serial
model = serial.load(model_path)
d = model.discriminator
import gc
del model
gc.collect()
from pylearn2.utils import sharedX
X = sharedX(d.get_input_space().get_origin_batch(1))
obj = -d.fprop(X).sum()
from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent as BGD
import theano.tensor as T
def norm_constraint(updates):
assert X in updates
updates[X] = updates[X] / (1e-7 + T.sqrt(T.sqr(X).sum()))
opt = BGD(objective=obj, params=[X], param_constrainers=[norm_constraint], conjugate=True, reset_conjugate=False,
reset_alpha=False, line_search_mode='exhaustive', verbose=3, max_iter=20)
results = []
import numpy as np
rng = np.random.RandomState([1, 2, 3])
for i in xrange(10):
X.set_value(rng.randn(*X.get_value().shape).astype(X.dtype) / 10.)
opt.minimize()
Xv = X.dimshuffle(3, 1, 2, 0).eval()
results.append(Xv)
X = np.concatenate(results, axis=0)
from pylearn2.gui.patch_viewer import make_viewer
v = make_viewer(X)
v.show()
示例13: BatchGradientDescent
# 需要导入模块: from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent [as 别名]
# 或者: from pylearn2.optimization.batch_gradient_descent.BatchGradientDescent import minimize [as 别名]
from pylearn2.optimization.batch_gradient_descent import BatchGradientDescent
bgd = BatchGradientDescent(objective=-neuron,
params=[X],
inputs=None,
max_iter=100,
lr_scalers=None,
verbose=3,
tol=None,
init_alpha=None,
min_init_alpha=1e-3,
reset_alpha=True,
conjugate=True,
gradients=None,
gradient_updates=None,
accumulate=False,
theano_function_mode=None,
param_constrainers=None)
bgd.minimize()
X = normed.eval()[:,:,:,0].transpose(1,2,0)
import numpy as np
X /= np.abs(X).max()
print (X.min(), X.max())
from pylearn2.utils.image import show
show(X)