gpt4 book ai didi

python - Keras,如何获取每一层的输出?

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:38 24 4
gpt4 key购买 nike

我已经用 CNN 训练了一个二元分类模型,这是我的代码

model = Sequential()
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
border_mode='valid',
input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (16, 16, 32)
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters*2, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=pool_size))
# (8, 8, 64) = (2048)
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2)) # define a binary classification problem
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
nb_epoch=nb_epoch,
verbose=1,
validation_data=(x_test, y_test))

在这里,我想像 TensorFlow 一样获得每一层的输出,我该怎么做?

最佳答案

您可以使用以下方式轻松获取任何层的输出: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

注意:要模拟 Dropout,请在 layer_outs 中使用 learning_phase 作为 1.,否则使用 0.

编辑:(基于评论)

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

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

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

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 内存,并且需要对较低层进行多次张量计算。

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

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 - Keras,如何获取每一层的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55025224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com