您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python-Keras,如何获得每一层的输出?

Python-Keras,如何获得每一层的输出?

你可以使用以下命令轻松获取任何图层的输出model.layers[index].output

对于所有图层,请使用以下命令:

from keras import backend as K

inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functors = [K.function([inp, K.learning_phase()], [out]) for out in outputs]    # evaluation functions

# Testing
test = np.random.random(input_shape)[np.newaxis,...]
layer_outs = [func([test, 1.]) for func in functors]
print layer_outs

注:为了模拟差使用learning_phase如1.在layer_outs以其它方式使用0.

编辑:(基于评论

K.function 创建theano / tensorflow张量函数,该函数随后用于从给定输入的符号图中获取输出

现在K.learning_phase()需要输入作为输入,因为许多Keras层(如Dropout / Batchnomalization)都依赖它来在训练和测试期间更改行为。

因此,如果你删除代码中的辍学层,则可以简单地使用:

from keras import backend as K

inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functors = [K.function([inp], [out]) for out in outputs]    # evaluation functions

# Testing
test = np.random.random(input_shape)[np.newaxis,...]
layer_outs = [func([test]) for func in functors]
print layer_outs

编辑2:更优化

我刚刚意识到,先前的答案并不是针对每个函数评估进行优化的,因为数据将被传输到cpu-> GPU内存中,并且还需要对低层进行n-n-over的张量计算。

相反,这是一种更好的方法,因为你不需要多个函数,而只需一个函数即可为你提供所有输出的列表:

from keras import backend as K

inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functor = K.function([inp, K.learning_phase()], outputs )   # evaluation function

# Testing
test = np.random.random(input_shape)[np.newaxis,...]
layer_outs = functor([test, 1.])
print layer_outs
python 2022/1/1 18:24:57 有348人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶