Как добавить данные о возрасте и поле в изображения для сверточной нейронной сети? - PullRequest
1 голос
/ 02 апреля 2019

В настоящее время я работаю над классификацией изображений меланомы с помощью Keras CNN. Изображения поставляются с метаданными - возраст, пол и место повреждения.

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

Как именно я могу добавить данные возраста, пола и т. Д. К изображениям?

Вот снимок экрана экспортированного Dataframe - красным я использую CNN, и я хотел бы добавить зеленый раздел: https://i.imgur.com/O75LpBx.jpg

Если есть стандартный способ сделать это, я был бы очень признателен, если бы вы могли поделиться им. Спасибо

Я пытался в Google "добавить демографические данные в CNN" или "добавить пол в CNN" и т. Д. И не могу найти какую-либо информацию.

Моя текущая структура модели:

model = Sequential()

    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(MaxPool2D(pool_size=(2, 2)))
    model.add(BatchNormalization())

    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(MaxPool2D(pool_size=(2, 2)))
    model.add(BatchNormalization())


    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(BatchNormalization())

    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(BatchNormalization())

    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu'))
    model.add(BatchNormalization())
    model.add(MaxPool2D(pool_size=(2, 2)))

    model.add(Conv2D(32, (3, 3), activation='relu'))
    model.add(BatchNormalization())

    model.add(Conv2D(32, (3, 3), activation='relu'))
    model.add(BatchNormalization())

    model.add(MaxPool2D(pool_size=(2, 2)))

    model.add(Flatten())

    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.2))

    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.2))

    model.add(Dense(num_classes, activation='sigmoid'))

    adam = Adam(lr=0.001)

    model.compile(loss='binary_crossentropy',
                  optimizer=adam,
                  metrics=[km.binary_precision(), km.binary_recall(),km.binary_f1_score()])

1 Ответ

1 голос
/ 02 апреля 2019

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

Ознакомьтесь с документом Keras об этом:https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...