2016-05-07 13 views
9

何らかの理由で、私の減衰率を設定しても学習率が変わらないように見えます。私は学習率を見るためにコールバックを追加し、それは各エポック後に同じように見えます。なぜこれがうまく変更されSGDでの減衰にもかかわらず、ケラスの学習率は変化しません

class LearningRatePrinter(Callback): 
    def init(self): 
     super(LearningRatePrinter, self).init() 

    def on_epoch_begin(self, epoch, logs={}): 
     print('lr:', self.model.optimizer.lr.get_value()) 

lr_printer = LearningRatePrinter() 

model = Sequential() 
model.add(Flatten(input_shape = (28, 28))) 
model.add(Dense(200, activation = 'tanh')) 
model.add(Dropout(0.5)) 
model.add(Dense(20, activation = 'tanh')) 
model.add(Dense(10, activation = 'softmax')) 

print('Compiling Model') 
sgd = SGD(lr = 0.01, decay = 0.1, momentum = 0.9, nesterov = True) 
model.compile(loss = 'categorical_crossentropy', optimizer = sgd) 
print('Fitting Data') 
model.fit(x_train, y_train, batch_size = 128, nb_epoch = 400, validation_data = (x_test, y_test), callbacks = [lr_printer]) 


lr: 0.009999999776482582 
Epoch 24/400 
60000/60000 [==============================] - 0s - loss: 0.7580 - val_loss: 0.6539 
lr: 0.009999999776482582 
Epoch 25/400 
60000/60000 [==============================] - 0s - loss: 0.7573 - val_loss: 0.6521 
lr: 0.009999999776482582 
Epoch 26/400 
60000/60000 [==============================] - 0s - loss: 0.7556 - val_loss: 0.6503 
lr: 0.009999999776482582 
Epoch 27/400 
60000/60000 [==============================] - 0s - loss: 0.7525 - val_loss: 0.6485 
lr: 0.009999999776482582 
Epoch 28/400 
60000/60000 [==============================] - 0s - loss: 0.7502 - val_loss: 0.6469 
lr: 0.009999999776482582 
Epoch 29/400 
60000/60000 [==============================] - 0s - loss: 0.7494 - val_loss: 0.6453 
lr: 0.009999999776482582 
Epoch 30/400 
60000/60000 [==============================] - 0s - loss: 0.7483 - val_loss: 0.6438 
lr: 0.009999999776482582 
Epoch 31/400 

答えて

10

を変更していない、問題はあなたがアクセス店舗初期学習率ではなく、現在のものにしようとしている分野です。現在の1が式

lr = self.lr * (1./(1. + self.decay * self.iterations)) 

を通じて各反復中にゼロから計算され、このようにあなたがそれをこのように監視することはできません、に格納されることはありません、あなたは、単にこの方程式を使って、自分でそれを計算する必要があります。

参照:126のhttps://github.com/fchollet/keras/blob/master/keras/optimizers.py

関連する問題