## what my model looks like
# defining the model archictecture
model = Sequential()
# 1st conv layer
model.add(Conv2D(32, (5, 5), activation='relu', input_shape=x_ip_shape))
# 1st max pool
model.add(MaxPooling2D(pool_size=(2, 2)))
# 2nd conv layer
model.add(Conv2D(64, (7, 7), activation='relu'))
# 2nd max pool
model.add(MaxPooling2D(pool_size=(2, 2)))
# Flattenning the input
model.add(Flatten())
# 1st Fully connected layer
model.add(Dense(10, activation='relu'))
# Adding droput
model.add(Dropout(0.25))
# softmax layer
model.add(Dense(classes_out, activation='softmax'))
# defining loss, optimizer learning rate and metric
model.compile(loss='categorical_crossentropy',optimizer=keras.optimizers.Adam(1e-4), metrics=['accuracy'])
## prediction
scores = model.evaluate(test_x, test_labels, verbose=0)问题:相反,我可以获得#1完全连接层的前传输出,即model.add(Dense(10, activation='relu'))。
我在keras 常见问题上做了一个例子。但这让我困惑:在这个问题上:
get_3rd_layer_output = K.function([model.layers[0].input, K.learning_phase()], [model.layers[3].output])在哪里传递输入数据?model.layers.input是什么意思?受过训练的模型是否存储输入?
发布于 2017-03-21 07:33:31
get_3rd_layer_output是一个Theano函数。你不需要对它做很多修改。
如果您想要网络中第一层的输入(任何层的)输出,model.layers[0].input将保持原样。换句话说,如果您希望将某一层的输出作为第4层的输入,则应该将其更改为model.layers[4].input。
K.learning_phase()指示您希望输出是在培训阶段还是在测试阶段。这两个层的输出之间会有一些差异,因为有一些层(如Dropout )在训练和测试期间的行为不同。如果希望输出类似于predict(),则需要传递零。
model.layers[3].output:这就是您需要修改的地方。找出要输出的层的索引。如果您有IDE (例如Pycharm),那么单击model变量并查看您的层的索引(记住它从零开始)。如果没有,为该层分配一些名称,然后您可以通过执行model.layers来查找所有的图层名称。从这里,您可以很容易地得到索引。例如,如果您想要从第10层输出,那么您可以将其更改为model.layers[10].output。
怎么叫这个?
同样,这是一个Theano函数,所以是一个symolic函数。您必须传递值并对其进行评估。你这样做如下:
out = get_3rd_layer_output([X, 0])[0] # test mode记住,即使X是一个数据点,它的形状也应该是(1,) + x_ip_shape。
https://stackoverflow.com/questions/42919436
复制相似问题