Как извлечь подраздел keras.Model в другую модель (тензор потока 2.1.0)? - PullRequest
1 голос
/ 24 марта 2020

Я хочу иметь возможность извлекать непрерывный диапазон подслоев моей модели Keras в отдельную подмодель. Ниже приведен простой пример, который воспроизводит ошибку, с которой я сталкиваюсь.

import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Layer
from tensorflow.keras.layers import Input 

inp = Input(shape=(128))
d1 = Dense(128, name='d1')(inp)
d2 = Dense(128, name='d2')(d1)
d3 = Dense(128, name='d3')(d2)
out = Dense(128, name='d4')(d3)

model = Model(inp, out)
inp_d2 = model.get_layer('d2').input
sub_model = Model(inp_d2, model.output)

Это вызывает:

ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(None, 128), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: []

Кто-нибудь знает, почему возникает эта ошибка или как ее исправить?

1 Ответ

0 голосов
/ 24 марта 2020

Этого можно добиться, объявив пустую субмодальную подмодель и добавив в нее слои, одновременно перебирая подмножество исходных слоев:

# Original Model:
inp = Input(shape=(128))
d1 = Dense(128, name='d1')(inp)
d2 = Dense(128, name='d2')(d1)
d3 = Dense(128, name='d3')(d2)
out = Dense(128, name='d4')(d3)

model = Model(inp, out)

# Sub Model
sub_model = tf.keras.Sequential()

# I will skip inp and d1:
for layer in model.layers[2:]:
  sub_model.add(layer)

# Print summary:
example_input_shape = (1, 128)
sub_model.build(example_input_shape)
print(sub_model.summary())

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...