Я пытаюсь создать Денс enet, но застрял со следующей ошибкой. Вот самый маленький пример для воспроизведения:
import tensorflow as tf
from tensorflow import keras
import tensorflow.keras.layers as tfkl
def create_model(input_dim):
feature_list = list()
input_x = tfkl.Input(shape=input_dim, name="Inputs")
feature_list.append(input_x)
x = tfkl.Conv2D(16, kernel_size=(3, 3), padding="same", name="Conv1")(input_x)
feature_list.append(x)
x = tfkl.Concatenate(axis=-1, name="Concat1")(feature_list)
x = tfkl.Conv2D(16, kernel_size=(3, 3), padding="same", name="Conv2")(x)
feature_list.append(x)
x = tfkl.Concatenate(axis=-1, name="Concat2")(feature_list)
return tf.keras.Model(inputs=input_x, outputs=x)
z = create_model((128,128,2))
Полученная ошибка:
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("Conv2/Identity:0", shape=(None, 128, 128, 16), dtype=float32) at layer "Concat1". The following previous layers were accessed without issue: ['Inputs', 'Conv1']
Я не мог понять, что не так с этой моделью?
Идея использования feature_list
заключается в том, что позже я могу создать плотный блок с переменным числом слоев свертки, то есть:
for i in range(nb_layers):
nb_filter += growth_rate
x = tfkl.Concatenate(axis=-1)(feature_list)
x = tfkl.Conv2D(nb_filter , kernel_size=(3, 3), padding="same")(x)
feature_list.append(x)
Кроме того, если я закомментирую следующие две строки в функции create_model:
#feature_list.append(x)
#x = tfkl.Concatenate(axis=-1, name="Concat2")(feature_list)
, то модель будет работать без проблем (поэтому это означает, что в целом Concatenate работает правильно):
z.summary()
Model: "model"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
Inputs (InputLayer) [(None, 128, 128, 2) 0
__________________________________________________________________________________________________
Conv1 (Conv2D) (None, 128, 128, 16) 304 Inputs[0][0]
__________________________________________________________________________________________________
Concat1 (Concatenate) (None, 128, 128, 18) 0 Inputs[0][0]
Conv1[0][0]
__________________________________________________________________________________________________
Conv2 (Conv2D) (None, 128, 128, 16) 2608 Concat1[0][0]
==================================================================================================
Total params: 2,912
Trainable params: 2,912
Non-trainable params: 0
__________________________________________________________________________________________________