使用fmin_cg函数最小化神经网络成本函数

我正在尝试将我的部分代码从MatLab移植到Python,但在使用scipy.optimize.fmin_cg函数时遇到了问题 – 这是我目前的代码:

我的成本函数:

def nn_costfunction2(nn_params,*args):    Theta1, Theta2 = reshapeTheta(nn_params)    input_layer_size, hidden_layer_size, num_labels, X, y, lam = args[0], args[1], args[2], args[3], args[4], args[5]       m = X.shape[0] #向量长度    X = np.hstack((np.ones([m,1]),X)) #添加偏置单元    layer1 = sigmoid(Theta1.dot(np.transpose(X))) #计算第一层    layer1 = np.vstack((np.ones([1,layer1.shape[1]]),layer1)) #添加偏置单元    layer2 = sigmoid(Theta2.dot(layer1))    y_matrix = np.zeros([y.shape[0],layer2.shape[0]]) #创建一个矩阵,其中一个的位置对应于标签    for i in range(y.shape[0]):        y_matrix[i,y[i]-1] = 1    #成本函数    J = (1/m)*np.sum(np.sum(-y_matrix.T.conj()*np.log(layer2),axis=0)-np.sum((1-y_matrix.T.conj())*np.log(1-layer2),axis=0))    #添加正则化    J = J+(lam/(2*m))*np.sum(np.sum(Theta1[:,1:].conj()*Theta1[:,1:])+np.sum(Theta2[:,1:].conj()*Theta2[:,1:]))    #带向量化和正则化的反向传播    delta_3 = layer2 - y_matrix.T    r2 = delta_3.T.dot(Theta2[:,1:])    z_2 = Theta1.dot(X.T)    delta_2 = r2*sigmoidGradient(z_2).T    t1 = (lam/m)*Theta1[:,1:]    t1 = np.hstack((np.zeros([t1.shape[0],1]),t1))    t2 = (lam/m)*Theta2[:,1:]    t2 = np.hstack((np.zeros([t2.shape[0],1]),t2))    Theta1_grad = (1/m)*(delta_2.T.dot(X))+t1    Theta2_grad = (1/m)*(delta_3.dot(layer1.T))+t2    nn_params = np.hstack([Theta1_grad.flatten(),Theta2_grad.flatten()]) #展开参数    return nn_params

我调用函数的方式:

args = (input_layer_size, hidden_layer_size, num_labels, X, y, lam)fmin_cg(nn_costfunction2,nn_params, args=args,maxiter=50)

出现了以下错误:

  File "C:\WinPython3\python-3.3.2.amd64\lib\site-packages\scipy\optimize\optimize.py", line 588, in approx_fprime    grad[k] = (f(*((xk+d,)+args)) - f0) / d[k]ValueError: setting an array element with a sequence.

我尝试了多种传递参数给fmin_cg的排列组合,但这是我能达到的最远程度。单独运行成本函数不会引发任何错误。


回答:

成本函数中的输入变量应为一维数组。因此,您在J中的Theta1Theta2必须从nn_params中导出。您还需要return J

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注