【发布时间】:2016-09-29 20:46:41
【问题描述】:
我正在 Keras 中设置一个学习率调度程序,使用历史损失作为 self.model.optimizer.lr 的更新程序,但 self.model.optimizer.lr 上的值没有插入到 SGD 优化程序中,并且优化器使用默认学习率。代码是:
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.preprocessing import StandardScaler
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.losses = []
self.model.optimizer.lr=3
def on_batch_end(self, batch, logs={}):
self.losses.append(logs.get('loss'))
self.model.optimizer.lr=lr-10000*self.losses[-1]
def base_model():
model=Sequential()
model.add(Dense(4, input_dim=2, init='uniform'))
model.add(Dense(1, init='uniform'))
sgd = SGD(decay=2e-5, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error',optimizer=sgd,metrics['mean_absolute_error'])
return model
history=LossHistory()
estimator = KerasRegressor(build_fn=base_model,nb_epoch=10,batch_size=16,verbose=2,callbacks=[history])
estimator.fit(X_train,y_train,callbacks=[history])
res = estimator.predict(X_test)
使用 Keras 作为连续变量的回归器一切正常,但我想通过更新优化器学习率来获得更小的导数。
【问题讨论】:
标签: python optimization keras