Keras在同一任务上比TensorFlow慢

时间:2018-08-08 12:43:26

标签: python tensorflow keras

我正在使用Python运行一个斩首的DCNN(在本例中为Inception-V3)来获取图像特征。我正在使用Anaconda,Py3.6和Windows7。

使用TensorFlow时,我将会话保留在变量中(感谢jdehesa)并运行:

sess, graph, allTensors, modelInfo = initiate_graph(modelDir)
while True:
    filename = getImageFile()
    if not filename: break
    imgResized = fileReadAndResize(filename)
    feats = np.squeeze( sess.run(allTensors['dcnn'], {allTensors['resizedInput']: imgResized}) )  
    doSmthWithFeats(feats)

以这种方式运行时(allTensors['dcnn']在没有最后一层的情况下运行Inception-V3),我知道sess.run(...)大约需要0.4秒。

我想迁移到Keras,因为它非常简单,而且易于运行和比较多个标准DCNN。

我的Keras平行项是:

def createModel():
    model = InceptionV3(input_tensor=Input(shape=(299, 299, 3)), include_top=False)
    x = model.output
    x = AveragePooling2D((8, 8), strides=(8, 8))(x)
    return Model(model.input, x)

modelIncptV3 = createModel()
while True:
    ...
    feats = model.predict(np.expand_dims(imgResized, 0)).flatten()
    doSmthWithFeats(feats)

现在,这里的feats创建行大约需要1.1秒(同时产生相同的功能)。

我尝试先编译模型

model.compile( optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) )

每个图像的运行时间现在约为1.0秒。

我在TF中使用不同的代码时遇到了类似的问题,我在运行时的差异是由于为每个图像启动了一个会话。这是一样的吗?我可以做些什么来保留会话?还有其他想法可与普通TF媲美吗?

谢谢

0 个答案:

没有答案