我试图在使用Keras的函数API时得到中间层的输出。我可以在使用标准顺序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,它就不起作用了。输出不正确。例如,它在第二层输出初始输入:
^{pr2}$回答:好吧,我自己解决。显然,当使用函数API时,0层是输入本身。所以一切都向前移动了一个位置。在
正如OP建议的那样,这个问题是由于索引为0的层(即
model.layers[0]
)对应于输入层:“当使用函数API时,0层就是输入本身。所以一切都向前移动了一个位置。”注意:这个答案是作为社区wiki发布的,如"Question with no answers, but issue solved in the comments (or extended in chat)"的accepted answer所建议的。
相关问题 更多 >
编程相关推荐