Многократный ввод изображений для приложения Keras - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь создать 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()```

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 01 апреля 2020

Здесь я построил DenseNet121 с 3 входами с помощью входов, которые вы упомянули в вопросе. Можете ли вы проверить, если это то, что вы искали.

%tensorflow_version 1.x
import tensorflow
import keras
from keras import Input, Model
from keras.applications.densenet import DenseNet121
from keras.layers import Dense, Flatten, Concatenate
from keras.activations import relu

# Multiple inputs
in1 = Input(shape=(128,128,3))
in2 = Input(shape=(128,128,3))
in3 = Input(shape=(128,128,3))

# CNN output
cnn = DenseNet121(include_top=False)
#cnn.summary()

out1 = cnn(in1)
out2 = cnn(in2)
out3 = cnn(in3)

# Flattening the output for the dense layer
fout1 = Flatten()(out1)
fout2 = Flatten()(out2)
fout3 = Flatten()(out3)

# Getting the dense output
dense = Dense(1, activation='softmax')

dout1 = dense(fout1)
dout2 = dense(fout2)
dout3 = dense(fout3)

# Concatenating the final output
out = Concatenate(axis=-1)([dout1, dout2, dout3])

# Creating the model
model = Model(inputs=[in1,in2,in3], outputs=out)
model.summary()

Вывод - Сводка модели выглядит следующим образом.

TensorFlow is already loaded. Please restart the runtime to change versions.
Model: "model_2"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_306 (InputLayer)          (None, 128, 128, 3)  0                                            
__________________________________________________________________________________________________
input_307 (InputLayer)          (None, 128, 128, 3)  0                                            
__________________________________________________________________________________________________
input_308 (InputLayer)          (None, 128, 128, 3)  0                                            
__________________________________________________________________________________________________
densenet121 (Model)             multiple             7037504     input_306[0][0]                  
                                                                 input_307[0][0]                  
                                                                 input_308[0][0]                  
__________________________________________________________________________________________________
flatten_1 (Flatten)             (None, 16384)        0           densenet121[1][0]                
__________________________________________________________________________________________________
flatten_2 (Flatten)             (None, 16384)        0           densenet121[2][0]                
__________________________________________________________________________________________________
flatten_3 (Flatten)             (None, 16384)        0           densenet121[3][0]                
__________________________________________________________________________________________________
dense_12 (Dense)                (None, 1)            16385       flatten_1[0][0]                  
                                                                 flatten_2[0][0]                  
                                                                 flatten_3[0][0]                  
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 3)            0           dense_12[0][0]                   
                                                                 dense_12[1][0]                   
                                                                 dense_12[2][0]                   
==================================================================================================
Total params: 7,053,889
Trainable params: 6,970,241
Non-trainable params: 83,648
__________________________________________________________________________________________________
...