python - Keras 中间层输出

标签 python neural-network keras deep-learning keras-layer

我试图在使用 Keras 的功能 API 时获得中间层输出。使用标准 Sequential API 时我能够获得输出,但不能使用功能 API。
我正在研究这个工作玩具示例:

from keras.models import Sequential
from keras.layers import Input, Dense,TimeDistributed
from keras.models import Model
from keras.layers import Dense, LSTM, Bidirectional,Masking

inputs = [[[0,0,0],[0,0,0],[0,0,0],[0,0,0]],[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],[[10,20,30],[40,50,60],[70,80,90],[100,110,120]]]

model = Sequential()
model.add(Masking(mask_value=0., input_shape = (4,3)))
model.add(Bidirectional(LSTM(3,return_sequences = True),merge_mode='concat'))
model.add(TimeDistributed(Dense(3,activation = 'softmax')))


print "First layer:"
intermediate_layer_model = Model(input=model.input,output=model.layers[0].output)
print intermediate_layer_model.predict(inputs)
print ""
print "Second layer:"
intermediate_layer_model = Model(input=model.input,output=model.layers[1].output)
print intermediate_layer_model.predict(inputs)
print ""
print "Third layer:"
intermediate_layer_model = Model(input=model.input,output=model.layers[2].output)
print intermediate_layer_model.predict(inputs)
但是如果我使用函数式 API,它就不起作用。输出不正确。例如它在第二层输出初始输入:
inputs_ = Input(shape=(4,3))
x = Masking(mask_value=0., input_shape = (4,3))(inputs_)
x = Bidirectional(LSTM(3,return_sequences = True),merge_mode='concat')(x)
predictions = TimeDistributed(Dense(3,activation = 'softmax'))(x)
model2 = Model(input=inputs_, output=predictions)

print "First layer:"
intermediate_layer_model = Model(input=model2.input,output=model2.layers[0].output)
print intermediate_layer_model.predict(inputs)
print ""
print "Second layer:"
intermediate_layer_model = Model(input=model2.input,output=model2.layers[1].output)
print intermediate_layer_model.predict(inputs)
print ""
print "Third layer:"
intermediate_layer_model = Model(input=model2.input,output=model2.layers[2].output)
print intermediate_layer_model.predict(inputs)
答案:显然,当使用功能性 API 层 0 是输入本身。所以一切都向前移动了一个位置。

最佳答案

问题源于这样一个事实,正如 OP 所建议的那样,索引为 0 的层(即 model.layers[0] )对应于输入层:“当使用功能性 API 时,层 0 是输入本身。所以一切都移动了一个位置向前。”

注意:按照 accepted answer 中的建议,此答案作为社区 wiki 发布的 "Question with no answers, but issue solved in the comments (or extended in chat)" .

关于python - Keras 中间层输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427179/

相关文章:

python - 将 xlwt 生成的 excel 文件导入 SAS

language-agnostic - 自动同义词检测方法

python - 如何在Caffe中计算ROC和AUC?

python - 带有 tensorflow 后端的张量数学

machine-learning - 如何仅评估某些类别的 Keras 模型精度

python - 如何让两个不同的函数并行运行并在Python中返回一个数组

python - 文件名大小写更改在 CentOs 7 上抛出 Os.error[errno 2] python

python - 在 Tensorflow NN 模型中将权重初始化为单位矩阵

python - Keras 如何处理多标签分类?

machine-learning - Keras 是否需要一种热编码?