Keras / Tensorflow: obtenha previsões ou resultados de todas as camadas com eficiência

Eu sou capaz de obter a saída / previsões de todas as camadas, conforme sugerido emKeras Docs: como posso obter a saída de uma camada intermediária

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)

Mas isso é incrivelmente mais lento e leva mais de um minuto (com clock de ~65s, no6700HQ comGTX1070, isso é ridiculamente alto, a inferência acontece em menos de um segundo ...!) para modelos com cerca de 50 camadas. Eu acho que isso ocorre porque ele está construindo um modelo sempre, carrega o modelo na memória, passa entradas e obtém saídas. Claramente, você não pode obter a saída da última camada sem obter resultados das outras camadas, como eu as salvo todas como acima, sem ter que criar modelos redundantes (ou de uma maneira mais rápida e eficiente)?

Atualização: Eu também notei que isso NÃO utiliza minha GPU, isso significa que todas as camadas de conv estão sendo executadas pela CPU? Por que não usaria minha GPU para isso? Acho que vai demorar muito menos se usar minha GPU.

Como faço isso com mais eficiência?

questionAnswers(1)

yourAnswerToTheQuestion