张量流:回调方法“on_train_batch_end”与批处理时间相比很慢

Moh*_*lah 15 conv-neural-network keras tensorflow

我正在尝试使用 RandomSearch 创建 CNN 模型,但它非常慢并且会弹出此错误tensorflow:Callback method on_train_batch_end is slow compared to the batch time 我正在 google colab 中运行我的代码,并在 gpu 上设置硬件加速这是我的代码

def model_builder(hp):
    model=Sequential([
        Conv2D(filters=hp.Int('conv_1_filter',min_value=32,max_value=128,step=32),
               kernel_size=hp.Int('conv_1_filter',min_value=2,max_value=3,step=1),
               activation='relu',
               padding='same',
               input_shape=(200,200,3)),
        MaxPooling2D(pool_size=(2,2),strides=(2,2)),
        
        Conv2D(filters=hp.Int('conv_2_filter',min_value=32,max_value=128,step=32),
               kernel_size=hp.Int('conv_2_filter',min_value=2,max_value=3,step=1),
               padding='same',
               activation='relu'),
        MaxPooling2D(pool_size=(2,2),strides=(2,2)),
        
        Flatten(),
        
        Dense(units=hp.Int('dense_1_units',min_value=32,max_value=512,step=128),
              activation='relu'),
        
        Dense(units=10,
              activation='softmax')
               
    ])
    
    model.compile(optimizer=Adam(hp.Choice('learning_rate',values=[1e-1,1e-3,3e-2])),
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    return model
Run Code Online (Sandbox Code Playgroud)

然后随机搜索和拟合

tuner=RandomSearch(model_builder,
                   objective='val_accuracy',
                   max_trials=2,
                   directory='projects',
                   project_name='Hypercars CNN'
                  )
tuner.search(X_train,Y_train,epochs=2,validation_split=0.2)
Run Code Online (Sandbox Code Playgroud)

yud*_*esh 14

这是因为在每个批次结束时运行的其他操作消耗的时间比批次本身更多的时间。可能是您的批次非常小,即与原始批次相比任何操作都较慢。

Increasing the batch size应该解决这个问题。或者,您可以use_multiprocessing = True输入model.fit()并选择适当数量的工作人员来更有效地生成训练批次 - 但这仅适用于使用生成器或keras.utils.Sequence.

有两个帖子讨论这个问题:

  1. 线程1
  2. 线程2