1
Keras 또는 Theano에서 기하 급수적 인 학습률로 길쌈 신경 네트워크 (CNN)를 구현하고 싶습니다. 내가 Keras이 설정에 대한 SGD 최적화 할 수 있습니다 알고Keras 또는 Theano에서 지수가 부식 된 학습률로 길쌈 신경망을 구현하는 방법
eta = et0*exp(LossFunction)
where et0 is the initial learning rate and LossFunction is a cost function
: 학습 속도를 동적으로 다음 업데이트 법률에 따라 변경
감쇠 용어 만 이상의 고정 된 부패 학습 속도 붕괴를 허용SGD(lr, momentum0, decay, nesterov)
각 시대.
비용 함수와 관련하여 기하 급수적으로 감소하는 학습 속도를 사용하여 SGD를 설정하거나 코드화하는 방법은 무엇입니까? 나는 다음과 같은 스키마를 사용하여 동작을 얻을 수 있다고 생각
class SGD(Optimizer):
'''Stochastic gradient descent, with support for momentum,
learning rate decay, and Nesterov momentum.
# Arguments
lr: float >= 0. Learning rate.
momentum: float >= 0. Parameter updates momentum.
decay: float >= 0. Learning rate decay over each update.
nesterov: boolean. Whether to apply Nesterov momentum.
'''
def __init__(self, lr=0.01, momentum=0., decay=0.,
nesterov=False, **kwargs):
super(SGD, self).__init__(**kwargs)
self.__dict__.update(locals())
self.iterations = K.variable(0.)
self.lr = K.variable(lr)
self.momentum = K.variable(momentum)
self.decay = K.variable(decay)
self.inital_decay = decay
def get_updates(self, params, constraints, loss):
grads = self.get_gradients(loss, params)
self.updates = []
lr = self.lr
if self.inital_decay > 0:
lr *= (1./(1. + self.decay * self.iterations))
self.updates .append(K.update_add(self.iterations, 1))
# momentum
shapes = [K.get_variable_shape(p) for p in params]
moments = [K.zeros(shape) for shape in shapes]
self.weights = [self.iterations] + moments
for p, g, m in zip(params, grads, moments):
v = self.momentum * m - lr * g # velocity
self.updates.append(K.update(m, v))
if self.nesterov:
new_p = p + self.momentum * v - lr * g
else:
new_p = p + v
# apply constraints
if p in constraints:
c = constraints[p]
new_p = c(new_p)
self.updates.append(K.update(p, new_p))
return self.updates
def get_config(self):
config = {'lr': float(K.get_value(self.lr)),
'momentum': float(K.get_value(self.momentum)),
'decay': float(K.get_value(self.decay)),
'nesterov': self.nesterov}
base_config = super(SGD, self).get_config()
return dict(list(base_config.items()) + list(config.items()))
제안 사항은 좋은 생각입니다. 하지만 LearningRateScheduler (일정)에서 체크인하고 일정 기능은 신기원 색인 만 입력으로 허용합니다. 문제는 LearningRateScheduler – jingweimo
의 프레임 워크에 손실 정보를 통합하는 방법입니다. 클래스에 데이터 집합과 모델을 저장하는 필드를 만들 수 있으며 각 반복에서 데이터 집합을 사용하여 적절한 통계를 계산할 수 있습니다. –