При доступе к выходу промежуточного уровня я всегда получал сообщение об ошибке: AttributeError: Layer l has no inbound nodes.
Я прочитал, что для определения этой проблемы необходимо определить input_shape
на начальном уровне:
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.flatten = tf.keras.layers.Flatten(input_shape=(28, 28))
self.dense = tf.keras.layers.Dense(64, activation=tf.nn.relu)
self.classifier = tf.keras.layers.Dense(10, name='classifier')
def call(self, inputs):
x = self.flatten(inputs)
x = self.dense(x)
return self.classifier(x)
К сожалению, это не сработало для меня.
После этой неудачной попытки я попытался восстановить свою модель, используя tf.keras.Sequential
, и снова указал input_shape
для первого слоя:
tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(64, activation=tf.nn.relu),
tf.keras.layers.Dense(10, name='classifier')
])
Это, с другой стороны, сработало!
Поэтому я спросил себя, почему первый подход не сработал. Чтобы проверить это, я указал произвольное / неправильное значение input_shapes
для подклассовой модели следующим образом:
class WrongInputShapeModel(tf.keras.Model):
def __init__(self):
super(WrongInputShapeModel, self).__init__()
self.flatten = tf.keras.layers.Flatten(input_shape=(42, 42, 42))
# ...
Я заметил, что эта модель все еще функционирует с MNIST (который имеет 28x28 изображений). Это позволило мне поверить, что ключевое слово input_shape
не влияет на определение подкласса модели tf.keras.Model
.
Это ошибка или я что-то упустил?