我试图创建一个CNN模型使用随机搜索,但它非常慢,并弹出这个错误tensorflow:Callback method on_train_batch_end is slow compared to the batch time
我正在运行我的代码在谷歌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
然后随机搜索和拟合
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)
2条答案
按热度按时间nkcskrwz1#
这是由于在每个批处理结束时运行的其它操作比批处理本身占用的时间更多。这可能是因为批处理非常小,即与原始批处理相比速度较慢的任何操作。
或者,您可以在
model.fit()
中使用use_multiprocessing = True
并选择适当数量的工作线程,以更高效地生成训练批处理-但这仅适用于使用生成器或keras.utils.Sequence
的数据集。两个线程谈论这个问题:
djp7away2#
use_multiprocessing = True
可以消除该警告,但弹出另一个警告,涉及在tf2中使用多处理。