Я пытаюсь создать CNN на основе приложения Keras DenseNet121, которое может принимать несколько изображений в качестве входных данных.
Мне удалось выяснить, как объединить несколько ImageDataGenerator для предоставления данных для сети в соответствии с этим потоком и как принять несколько входов и передать их в один CNN использует функциональный API Keras в соответствии с этим потоком .
Даже если я чувствую, что сделал то же самое, что и вышеупомянутые потоки, я все еще сталкиваюсь со следующей ошибкой при попытке подключить входы к сеть.
ValueError: Неверный аргумент input_shape [(Нет, 32, 32, 3), (Нет, 32, 32, 3), (Нет, 32, 32, 3), (Нет , 32, 32, 3), (Нет, 32, 32, 3), (Нет, 32, 32, 3), (Нет, 32, 32, 3), (Нет, 32, 32, 3), (Нет , 32, 32, 3), (Нет, 32, 32, 3), (Нет, 32, 32, 3)]: модель имеет 1 тензорный вход.
Этот код используется для настройка модели с 11 входными изображениями:
in1 = Input(shape=(32,32,3))
in2 = Input(shape=(32,32,3))
in3 = Input(shape=(32,32,3))
in4 = Input(shape=(32,32,3))
in5 = Input(shape=(32,32,3))
in6 = Input(shape=(32,32,3))
in7 = Input(shape=(32,32,3))
in8 = Input(shape=(32,32,3))
in9 = Input(shape=(32,32,3))
in10 = Input(shape=(32,32,3))
in11 = Input(shape=(32,32,3))
inputs = [in1,in2,in3,in4,in5,in6,in7,in8,in9,in10,in11]
densenet_121_model = DenseNet121(include_top=False, weights='imagenet', input_shape=input_shape, pooling='avg')
model_base = densenet_121_model(inputs)
output = Dense(units=n_output_units, activation=activation_fn)(model_base)
model = Model(inputs=inputs, outputs=output)
Я знаю, что это технически нарушает параметр input_shape для densenet121, но это также имеет место в соответствии с thushv89 согласно Ответ на второй поток , на который есть ссылки выше.
Я привожу приведенный ниже код для удобства.
from tensorflow.python.keras import layers, models, applications
# Multiple inputs
in1 = layers.Input(shape=(128,128,3))
in2 = layers.Input(shape=(128,128,3))
in3 = layers.Input(shape=(128,128,3))
# CNN output
cnn = applications.xception.Xception(include_top=False)
out1 = cnn(in1)
out2 = cnn(in2)
out3 = cnn(in3)
# Flattening the output for the dense layer
fout1 = layers.Flatten()(out1)
fout2 = layers.Flatten()(out2)
fout3 = layers.Flatten()(out3)
# Getting the dense output
dense = layers.Dense(100, activation='softmax')
dout1 = dense(fout1)
dout2 = dense(fout2)
dout3 = dense(fout3)
# Concatenating the final output
out = layers.Concatenate(axis=-1)([dout1, dout2, dout3])
# Creating the model
model = models.Model(inputs=[in1,in2,in3], outputs=out)
model.summary()```
Любая помощь будет принята с благодарностью!