我已經訓練了一個 TensorFlow 模型并將其保存到本地磁盤。當我加載它并進行推理時,如何獲得中間層的輸出?
我使用教程中的示例作為演示。
型號為:
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.conv1 = Conv2D(32, 3, activation='relu')
self.flatten = Flatten()
self.d1 = Dense(128, activation='relu')
self.d2 = Dense(10)
def call(self, x):
x = self.conv1(x)
x = self.flatten(x)
x = self.d1(x)
return self.d2(x)
# Create an instance of the model
model = MyModel()
我將模型保存到本地并將其加載到另一個地方。
# save model to local
tf.saved_model.save(model, export_dir="./saved_model")
# load model from local
loaded = tf.saved_model.load("./saved_model")
concrete_fun = loaded.signatures["serving_default"]
# do reference
out = concrete_fun(tf.zeros((2, 28, 28, 1)))
out["output_1"].shape
據我所知,具體功能input是and所獨有的output。
例如,如何獲得中間層output的weights和?biasself.conv1
uj5u.com熱心網友回復:
您可以嘗試運行:
print([var for var in concrete_fun.trainable_variables])
獲得每一層的權重和偏差。要訪問模型的圖形,您可以運行concrete_fun.graph. 有關更多詳細資訊,請參見此處。
要訪問中間層的輸出,最簡單的方法是像這樣保存模型:
model.save('your_model', save_format='tf')
然后加載它:
model.save('your_model', save_format='tf')
model = tf.keras.models.load_model('your_model')
conv_layer = model.get_layer(index=0)
print(conv_layer(tf.random.normal((1, 28, 28, 1))).shape)
uj5u.com熱心網友回復:
您可以使用.get_layer()方法(模型類)訪問模型中的任何層。您只需要圖層的名稱:
conv1_layer = model.get_layer("name_of_the_layer")
從這里您可以訪問權重(Layer 類):
conv1_layer.get_weights()
輸出:
conv1_layer.output
和偏差(https://stackoverflow.com/a/42053507/13469674):
conv1_layer.get_weights()[1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/489709.html
