我試圖使用MXNet來做一些約束優化,而不是在前饋網絡中反向推廣,但涉及類似的計算,大型陣列產品,一些梯度下降等等......使用MXNet的梯度下降NDArray
例如,爲了最小化M-2 * Id的跡爲M變化超過設定正交矩陣的,我可以由矢量化矩陣中的以下使用numpy的和SciPy的做到這一點,如:
import numpy as np
from scipy.optimize import minimize
# make matrix to vector and vector to matrix functions
def toVector(m):
return np.hstack(m.flatten())
def toMatrix(vec):
return vec[:4*4].reshape(4,4)
# Define objective function to minimize
def f(x):
matM=toMatrix(x)
return(np.trace(matM-2*np.identity(4)))
# Define the constraint that X be orthogonal, i.e. X X^t = I
cons = ({'type': 'eq',
... 'fun' : lambda x: np.array(np.linalg.norm(
... np.dot(toMatrix(x),np.transpose(toMatrix(x)))-np.eye(4)))
... })
# Define an initial point randomly
m0=np.random.rand(4,4)
# And minimize
result = minimize(f, toVector(m0), constraints=cons,
... method='SLSQP', options={'disp': True})
toMatrix(result.x)
現在,假設我正在爲N×N矩陣進行這種計算,其中N很大,我想多次重複計算,更新一些參數ameters。有沒有一種很好的方法來進行這種使用MXNet在GPU內核上工作的有限優化,計算約束梯度等等,而無需對輸入進行矢量化並使用simple-gradient-descent-using-mxnet中描述的前饋網絡解決方案。