我正在处理具有大量输入(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
答案 0 :(得分:2)
是的,这是可以预料的。
使用神经网络进行预测是几个矩阵乘法的简单问题。另一方面,训练/拟合模型的数学要复杂得多。您正在等待算法找出如何将一张图片与另一张图片区分开-这不是一件容易的事。
永远不要只训练一张图像。这只会使模型记住该图像。确保您正在训练自己的数据训练集中,并保留另一个(例如20%)用于测试或验证模型的质量。
一些加快速度的方法: