相关疑难解决方法(0)

Keras/Tensorflow:高效获取所有层的预测或输出

我能够按照Keras Docs 中的建议获得所有层的输出/预测:how-can-i-obtain-the-output-of-an-intermediate-layer

def get_output_of_all_layers(model, test_input):
    output_of_all_layers = []

    for count, layer in enumerate(model.layers):

        # skip the input layer
        if count == 0:
            continue

        intermediate_layer_model = Model(inputs=model.input, outputs=model.get_layer(layer.name).output)
        intermediate_output = intermediate_layer_model.predict(test_input)[0]

        output_of_all_layers.append(intermediate_output)

    return np.array(output_of_all_layers)
Run Code Online (Sandbox Code Playgroud)

但是对于大约 50 层的模型,这速度慢得令人难以置信,并且需要超过一分钟(时钟时间约为65秒,在6700HQwith 中GTX1070,这是高得离谱,推理发生在不到一秒的时间内......!)。我猜这是因为它每次都在构建模型,将模型加载到内存中,传递输入并获得输出。显然,如果不从其他层获得结果,就无法获得最后一层的输出,如何像上面一样保存它们而不必创建冗余模型(或以更快、更有效的方式)?

更新:我还注意到这不利用我的 GPU,这意味着所有的 conv 层都由 CPU 执行?它为什么不为此使用我的 GPU?我认为如果它使用我的 GPU,它会花费更少的时间。

我如何更有效地做到这一点?

python layer output keras tensorflow

3
推荐指数
1
解决办法
4708
查看次数

标签 统计

keras ×1

layer ×1

output ×1

python ×1

tensorflow ×1