2016-05-07 14 views
9

Vì lý do nào đó, tốc độ học tập của tôi dường như không thay đổi khi tôi đặt yếu tố phân rã. Tôi đã thêm một cuộc gọi lại để xem tốc độ học tập và nó có vẻ giống nhau sau mỗi thời đại. Tại sao nó không thay đổiTỷ lệ học tập của Keras không thay đổi mặc dù bị hư hại trong 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 

Trả lời

10

này đang thay đổi tốt, vấn đề là lĩnh vực bạn đang cố gắng truy cập cửa hàng tỷ lệ học ban đầu, không phải là một hiện tại. hiện tại được tính từ đầu trong mỗi lần lặp thông qua phương trình

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

nó không bao giờ được lưu trữ, do đó bạn không thể theo dõi nó theo cách này, bạn chỉ cần phải tính toán nó trên của riêng bạn, sử dụng phương trình này.

xem dòng: 126 của https://github.com/fchollet/keras/blob/master/keras/optimizers.py

Các vấn đề liên quan