我的模型是在数字图像(MNIST dataset
)上训练的。我正在尝试打印网络第二层的输出-128个数字的数组。
在阅读了很多示例之后,例如this,and this,or 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/