python - 如何输出网络的第二层?

标签 python tensorflow keras

我的模型是在数字图像(MNIST dataset)上训练的。我正在尝试打印网络第二层的输出-128个数字的数组。

在阅读了很多示例之后,例如thisand thisor this

我没有在自己的网络上执行此操作。我自己的算法都无法使用这两种解决方案。

链接到Colab:
https://colab.research.google.com/drive/1MLbpWJmq8JZB4_zKongaHP2o3M1FpvAv?fbclid=IwAR20xRz2i6sFS-Nm6Xwfk5hztdXOuxY4tZaDRXxAx3b986HToa9-IaTgASU

我收到了很多不同的错误消息。我试图处理它们中的每一个,但我自己却无法解决。

我想念什么?如何输出第二层?
如果我的Shape是(28,28)-input_shape的类型和值应该是什么?

失败的试验和错误,例如:

(1)

for layer in model.layers:

    get_2nd_layer_output = K.function([model.layers[0].input],[model.layers[2].output])
    layer_output = get_2nd_layer_output(layer)[0]
    print('\nlayer output: get_2nd_layer_output=, layer=', layer, '\nlayer output: get_2nd_layer_output=', get_2nd_layer_output)

TypeError: inputs should be a list or tuple.



(2)
input_shape=(28, 28)
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, 0.])
print('layer_outs',layer_outs)

tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable dense_1/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist. (Could not find resource: localhost/dense_1/bias) [[{{node dense_1/BiasAdd/ReadVariableOp}}]]

最佳答案

看起来您正在混合旧的keras(在tensorflow 2.0之前:import keras)和新的keras(from tensorflow import keras)。

尽量不要在tensorflow> = 2.0 旁边使用旧的keras(并且不要像第一个链接中那样引用旧的文档),因为它很容易与新的keras混淆(尽管没有什么是严格不合逻辑的):

from tensorflow import keras
from keras.models import Model
print(Model.__module__) #outputs 'keras.engine.training'

from tensorflow.keras.models import Model
print(Model.__module__) #outputs 'tensorflow.python.keras.engine.training'

混合这两个库的行为将非常不稳定。

完成此操作后,请尝试使用an answer,m为模型,my_input_shape为模型输入的形状,即一张图片的形状(此处为(28,28)或(1,28,28)(如果有)批次):
from tensorflow import keras as K
my_input_data = np.random.rand(*my_input_shape) 
new_temp_model = K.Model(m.input, m.layers[3].output) #replace 3 with index of desired layer
output_of_3rd_layer = new_temp_model.predict(my_input_data) #this is what you want

如果您有一张图片img,则可以直接编写new_temp_model.predict(img)

关于python - 如何输出网络的第二层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60359268/

相关文章:

Python Selenium - 检查一个 WebElement 是否等于另一个 WebElement

python - 匹配元组中的字符串 - python

python - tensorflow : How to compute L1 difference between the batch (matrix of size B X DIM) and vocabulary (matrix of size V X DIM)?

python - Keras误解了训练数据的形状

python - 如何检测小部件是否在视线范围内? pyqt

python - 我怎样才能得到字符串的所有可能的 "leet"版本(带有可选替换)?

python - 图像数据生成器错误

tensorflow - 函数式 API 中长度可变的 Keras 嵌入层

python - 我可以在 tensorflow 中应用计算梯度吗?

tensorflow - Keras:MLP 对 CPU 再现性的影响