【发布时间】:2016-07-19 06:09:25
【问题描述】:
我想训练一个使用 BFGS 在 Keras 中实现的前馈神经网络。为了看看是否可以做到,我使用scipy.optimize.minimize 实现了一个感知器,代码如下。
from __future__ import print_function
import numpy as np
from scipy.optimize import minimize
from keras.models import Sequential
from keras.layers.core import Dense
# Dummy training examples
X = np.array([[-1,2,-3,-1],[3,2,-1,-4]]).astype('float')
Y = np.array([[2],[-1]]).astype('float')
model = Sequential()
model.add(Dense(1, activation='sigmoid', input_dim=4))
def loss(W):
weightsList = [np.zeros((4,1)), np.zeros(1)]
for i in range(4):
weightsList[0][i,0] = W[i]
weightsList[1][0] = W[4]
model.set_weights(weightsList)
preds = model.predict(X)
mse = np.sum(np.square(np.subtract(preds,Y)))/len(X[:,0])
return mse
# Dummy first guess
V = [1.0, 2.0, 3.0, 4.0, 1.0]
res = minimize(loss, x0=V, method = 'BFGS', options={'disp':True})
print(res.x)
但是,这个输出表明损失函数没有优化:
Using Theano backend.
Using gpu device 0: GeForce GTX 960M (CNMeM is disabled, cuDNN not available)
Optimization terminated successfully.
Current function value: 2.499770
Iterations: 0
Function evaluations: 7
Gradient evaluations: 1
[ 1. 2. 3. 4. 1.]
任何想法为什么这不起作用?是不是因为我没有将梯度输入到minimize,导致无法计算这种情况下的数值逼近?
【问题讨论】:
标签: python scipy neural-network keras