Keras model.fit与model.predict相比非常非常慢

时间:2020-10-30 16:13:49

标签: tensorflow keras classification

我正在处理具有大量输入(10e8功能)的二进制图像分类任务。我在Keras中定义了一个小的卷积网络,带有Tensorflow后端,原则上可以使用model.predict在第二秒内将一批500个此类图像分类。与此相比,训练模型非常慢。对于每个时期,仅在单个图像上使用model.fit大约需要20分钟。这种差异是可以预期的吗?有什么简单的改进吗?

重现此内容的Python代码如下:

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D,MaxPooling2D,Dropout,Dense

model = Sequential()
model.add(Conv2D(filters=32, kernel_size=[4,150], activation='relu',input_shape=(257,44101,1)))      
model.add(MaxPooling2D(pool_size=(4, 500)))
model.add(Flatten)
model.add(Dropout(0.3))
model.add(Dense(50))
model.add(Dense(2, activation='softmax'))
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy())

ex_tensor=tf.ones([100,257,44101,1])
ex_labels=tf.ones([100,1])

model(ex_tensor) # Fast
model.fit(ex_tensor,ex_label,epochs=1,steps_per_epoch=1) # Very slow

1 个答案:

答案 0 :(得分:2)

是的,这是可以预料的。

使用神经网络进行预测是几个矩阵乘法的简单问题。另一方面,训练/拟合模型的数学要复杂得多。您正在等待算法找出如何将一张图片与另一张图片区分开-这不是一件容易的事。

永远不要只训练一张图像。这只会使模型记住该图像。确保您正在训练自己的数据训练集中,并保留另一个(例如20%)用于测试或验证模型的质量。

一些加快速度的方法:

  1. 通过按比例缩小图像来减少功能数量。 1,000,000,000个功能是很多功能。
  2. 降低模型的复杂性或更改超参数。
  3. 如果不能接受,请使用功能更强大的计算机。