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

时间:2018-08-03 17:40:41

标签: python tensorflow keras output layer

我能够按照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)

但这非常慢,而且耗时超过一分钟(以{<1>}与6700HQ一起在{ 65s 上运行),这荒谬地高,推断发生的时间不到秒...!)用于约50层的模型。我猜这是因为它每次都会构建一个模型,将模型加载到内存中,传递输入并获取输出。显然,如果没有其他层的结果就无法获得最后一层的输出,如何像上面一样保存它们,而不必创建冗余模型(或以更快,更有效的方式)?

更新:我还注意到这没有利用我的GPU,这意味着所有转换层都由CPU执行吗?为什么它不使用我的GPU?我认为,如果使用我的GPU,它的使用量将会减少。

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

1 个答案:

答案 0 :(得分:1)

如本·乌斯曼(Ben Usman)所建议,您可以首先将模型包装在基本的端到端RS中,并将其层作为输出提供给第二个GS

LeftStr(str, 8) = '][' + #30 + '01' + #29 

或者,您可以类似的方式使用Keras函数:

Model