带断点Keras模型

zf2sa74q  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(130)

我需要在keras中设置一个旧模型的断点:

import tensorflow as tf

inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
x1 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x1)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile()

实际的模型非常复杂,我只是提供了一个片段。有没有办法让我在正向传递中设置断点?只是想看看中间模型的输出。
谢谢

kninwzqo

kninwzqo1#

这可能有点取决于你的实际设置,但是你可以通过它的层来分割你的模型,就像你设置一个自动编码器一样,向前通过 Backbone.js ,看它-〉通过头部-〉输出。

import tensorflow as tf

inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
x1 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x1)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile()

back = tf.keras.Sequential(model.layers[:2])
head = tf.keras.Sequential(model.layers[2:])

# Instead of doing model(input) you can now do
inter = back(input)
print(inter)
result = head(inter)

或者,您也可以定义多个输出,这对于训练来说有点难,但是出于测试目的,您可以将训练后的权重拉到这个克隆模型中

inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
x1 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x1)
model = tf.keras.Model(inputs=inputs, outputs=[outputs, x1]) #<-- adding your intermediate layer as a second output
model.compile()

相关问题