Нейронная сеть, использующая как изображения, так и числовые входы - PullRequest
0 голосов
/ 30 декабря 2018

Для классификации изображений мы используем нейронную сеть с несколькими сверточными слоями, за которыми следуют несколько полностью связанных слоев.

Метаданные содержат некоторую числовую информацию, которая может помочь в классификации изображений.Существует ли простой способ ввода числовых метаданных в первый полностью связанный слой вместе с выводом сверток?Возможно ли реализовать это с помощью TensorFlow или даже лучше Keras?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Существует ли простой способ ввода числовых метаданных в первый полностью подключенный слой вместе с выводом сверток?

Да, это возможно.Вам нужны два входа для числовых метаданных и изображений.

inp1 = Input(28,28,1) # image
inp2 = Input(30,) # numerical metadata (assume size of numerical feature is 30)

conv2d = Convolution2D(100,strides=1,padding='same')(inp1)
embedding = Embedding(1000)(inp2)

# ... rest of the network
prev_layer = Concatenation(axis=-1)[feature_image, feature_metadata]            
prediction = Dense(100)(prev_layer)

model = Model(inputs=[inp1, inp2], outputs=prediction)

См. Полный пример в керасе здесь .

0 голосов
/ 30 декабря 2018

Вы можете обработать числовые данные в другой ветви, а затем объединить результат с веткой CNN, а затем передать объединенный тензор в несколько конечных плотных слоев.Вот общий эскиз решения:

# process image data using conv layers
inp_img = Input(shape=...)
# ...

# process numerical data
inp_num = Input(shape=...)
x = Dense(...)(inp_num)
out_num = Dense(...)(x)

# merge the result with a merge layer such as concatenation
merged = concatenate([out_conv, out_num])
# the rest of the network ...

out = Dense(num_classes, activation='softmax')(...)

# create the model
model = Model([inp_img, inp_num], out)

Конечно, чтобы построить такую ​​модель, вам нужно использовать Keras Functional API.Поэтому я настоятельно рекомендую прочитать официальное руководство для этой цели.

...