让我们说我有一个简单的将MNIST分类的NN模型,如下所示:
model = models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)
])
然后从第二层即密集层(激活relu之后)提取输出张量,如下所示:
mid_layer = model.get_layer("dense")
get_output = K.function([model.layers[0].input], [mid_layer.output])
对于某些特定的数据输入x
,我现在提取输出张量激活值:
mid_layer_outputs = get_output([test_images[0:1]])
并对其进行一些更改:
mid_layer_outputs = ...
现在,我希望模型从该层的修改后的输出值继续并相应地预测结果。我该怎么办?
我试图K.function([mid_layer_outputs], model.layers[-1].output)
从该层开始构建另一层,但是出现以下错误:
AttributeError:“ numpy.ndarray”对象没有属性“ op”
这是可以理解的,因为它无法使用NP数组对象而不是模型层对象继续进行预测。我该怎么做呢?
我想通了-我需要在第二层中指定下一层输入K.function
,然后将修改后的输出传递给它:
get_pred = K.function([model.layers[2].input], model.layers[-1].output)
pred = get_pred([mid_layer_outputs])
根据这个答案,K.function
运行我们在代码中创建的计算图,从第一个参数获取输入,并根据提到的层提取输出数量。因此K.function([mid_layer_outputs], model.layers[-1].output)
,它不能更早地工作,因为我没有直接传递要使用的层K.function
并连接到输出,而是直接传递了值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句