Theano的随机优化程序
downhill的Python项目详细描述
DOWNHILL
downhill包提供了最小化标量损失的算法 使用Theano定义的函数。
包括几种优化算法:
- ADADELTA
- ADAGRAD
- Adam
- Equilibrated SGD
- Nesterov’s Accelerated Gradient
- RMSProp
- Resilient Backpropagation
- Stochastic Gradient Descent
所有算法都允许使用规则或nesterov风格的动量。
快速入门:矩阵分解
假设你有100个1000维数据样本,你想 以10维为基础将数据表示为100个系数。这是 使用theano建模非常简单:可以使用矩阵 作为数据模型的乘法,用于优化的平方误差项,以及 稀疏正则化以鼓励较小的系数值。
一旦构建了损失的表达式,就可以使用 一次呼叫downhill.minimize:
importdownhillimportnumpyasnpimporttheanoimporttheano.tensorasTTFLOAT='df'[theano.config.floatX=='float32']defrand(a,b):returnnp.random.randn(a,b).astype(FLOAT)A,B,K=20,5,3# Set up a matrix factorization problem to optimize.u=theano.shared(rand(A,K),name='u')v=theano.shared(rand(K,B),name='v')z=TT.matrix()err=TT.sqr(z-TT.dot(u,v))loss=err.mean()+abs(u).mean()+(v*v).mean()# Minimize the regularized loss with respect to a data matrix.y=np.dot(rand(A,K),rand(K,B))+rand(A,B)# Monitor during optimization.monitors=(('err',err.mean()),('|u|<0.1',(abs(u)<0.1).mean()),('|v|<0.1',(abs(v)<0.1).mean()))downhill.minimize(loss=loss,train=[y],patience=0,batch_size=A,# Process y as a single batch.max_gradient_norm=1,# Prevent gradient explosion!learning_rate=0.1,monitors=monitors,monitor_gradients=True)# Print out the optimized coefficients u and basis v.print('u =',u.get_value())print('v =',v.get_value())
如果您希望在优化期间保持对模型的更多控制, 下坡提供迭代优化界面:
opt=downhill.build(algo='rmsprop',loss=loss,monitors=monitors,monitor_gradients=True)formetrics,_inopt.iterate(train=[[y]],patience=0,batch_size=A,max_gradient_norm=1,learning_rate=0.1):print(metrics)
如果这还不够的话,你可以直接要求下坡的更新 你的模型变量和你自己做的一切:
updates=downhill.build('rmsprop',loss).get_updates(batch_size=A,max_gradient_norm=1,learning_rate=0.1)func=theano.function([z],loss,updates=list(updates))for_inrange(100):print(func(y))# Evaluate func and apply variable updates.