2017-09-15 102 views
2

我發現fit_generator()會比它應該運行更多的步驟。
我設置了steps_per_epoch=100。我和k都從0開始。但是在訓練過程結束時,它會打印出k = 109。只有在添加驗證數據時纔會出現這種情況。Keras fit_generator上的問題,運行幾個步驟比應該多

def data_generate(xfd, yfd, x_line_offset, y_line_offset): 

    while True: 
     k = 0 

     x_line_offset, y_line_offset = shuffle_list(x_line_offset, y_line_offset) 

     for i in range(100): 
      print('i = {}'.format(i)) 
      print('k = {}'.format(k)) 
      k += 1 

      x_train = get_line_by_offset(xfd, x_line_offset[i]) 
      x_train = rescaling(x_train, 0, 65535, 0, 1) 
      y_train = get_line_by_offset(yfd, y_line_offset[i]) 

      yield x_train, y_train 

train_generator = data_generate(xfd_train, yfd_train, x_train_line_offset, y_train_line_offset) 
validation_generator = data_generate(xfd_valid, yfd_valid, x_valid_line_offset, y_valid_line_offset) 

model.fit_generator(train_generator, steps_per_epoch=100, 
        validation_data=validation_generator, 
        validation_steps=len(fix_y_valid_line_offset), epochs=1) 

因爲它會打印出k = 109,我認爲它運行幾個步驟。我不知道它是否有缺陷。但是在k = 99之後keras日誌消息不顯示。 enter image description here

回答

3

這裏沒有錯誤,這只是一些實現細節。函數fit_generator()有一個默認參數max_queue_size=10。在用於擬合/評估模型之前,將從train_generatorvalidation_generator的批次插入到隊列中。

當第一個紀元結束時,有100個批生成(k = 99)。但是,發電機將繼續生成10批以填滿隊列。這就是爲什麼你看到k = 100k = 109。與此同時,驗證過程開始,所以您還會看到來自validation_generatork = 0, ...