【发布时间】:2018-08-03 17:40:41
【问题描述】:
我能够按照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)
但这慢得令人难以置信,需要一分钟以上(时钟为 ~65 秒,在 6700HQ 和 GTX1070 中,这高得离谱,推理发生在不到一秒... !) 对于大约 50 层的模型。我猜这是因为它每次都在构建模型,将模型加载到内存中,传递输入并获取输出。显然,如果不从其他层获取结果,就无法获得最后一层的输出,我如何像上面一样保存它们而无需创建冗余模型(或以更快、更有效的方式)?
更新:我还注意到这并没有使用我的 GPU,这意味着所有的卷积层都由 CPU 执行?为什么它不使用我的 GPU 呢?我认为如果它使用我的 GPU,它会花费更少的时间。
如何更有效地做到这一点?
【问题讨论】:
-
我没有专门使用 keras,但是从一般的 tensorflow 角度来看,计算单个
intermediate_layer_model = Model(inputs=model.input, outputs=[layer.output for layer in model.layers[1:]])的输出怎么样?
标签: python tensorflow keras output layer