Возможно ли, и если да, то как построить нейронную сеть, чтобы она не распространялась обратно в определенных регионах NN? - PullRequest
1 голос
/ 27 мая 2020

У меня была идея улучшить нейронную сеть, которую я сейчас использую, но я новичок в машинном обучении, поэтому не знаю, возможно ли это реализовать, насколько это сложно или просто не стоит . Идея такая. У меня есть образец изображений, и я должен классифицировать их по сигналу и фону (0 или 1). Дело в том, что эти изображения, с которыми связана переменная x, весьма коррелированы с этой переменной, а это означает, что два изображения с одинаковым значением x в целом будут намного больше похожи на два изображения с очень разными значениями x. Поэтому я подумал, что, может быть, было бы неплохо обучить этот образец в мини-образцах, при этом каждое изображение больше учитывает веса, обученные изображениями с аналогичным x. И вот как я думал реализовать это (возможно, эта реализация не совсем жизнеспособна, поэтому, если вы знаете более жизнеспособный способ, не стесняйтесь сказать мне):

Сейчас я использую сверточную нейронную сеть для весь образец, используя Keras, и это примерно так:

def buildCNN(input_shape):
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3,3),activation='relu',input_shape=input_shape))
    model.add(Conv2D(64, (3,3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(128,activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1, activation='sigmoid'))
    return model

Моя идея состоит в том, чтобы разбить образец, например, на 20 мини-выборок с одинаковыми x и использовать этот же CNN для каждого из этих мини-выборок (возможно, уменьшив немного количество параметров), а затем соедините эти разные CNN с некоторыми весами и смещениями. Затем, при обучении и сравнении вывода с фактическим значением, при обратном распространении я хотел бы учитывать только для обучения эти внешние веса вместе с CNN, соответствующими диапазону x, соответствующему обучаемому изображению, оставляя значения параметры остальных CNN не затронуты. Я не знаю, существует ли что-то подобное и если да, то как это можно реализовать в Keras. Вы можете видеть в моем коде, что это довольно просто и мало что известно о Keras, поэтому, если у вас есть идеи, как это сделать, мне также понадобится, в частности, как это можно реализовать с помощью Keras (и если это невозможно с Keras, тогда скажите, возможны ли другие варианты и как).

(Между прочим, бонусный вопрос не имеет ничего общего с основным вопросом, поэтому на него не нужно отвечать, но если вы что-то об этом знаете, то это может помочь. Изображения, которые я использую, имеют sahpe (40, 40), поэтому они имеют низкое разрешение. Это не тот тип изображений, которые могут проходить через фильтр, увеличивающий его разрешение, поэтому у меня нет другого выбора, кроме работать с этим разрешением. Дело в том, что CNN, который я использую сейчас, работает нормально, но я думаю, что его можно было бы улучшить, если бы использовалась конкретная архитектура c для изображений с низким разрешением, но я не смог найти что-нибудь об этом. Если вы что-то знаете об этом, прокомментируйте и это.)

1 Ответ

1 голос
/ 28 мая 2020

К сожалению, более сложная топология нейронной сети невозможна с использованием модели keras.sequential. Вместо последовательной модели необходимо использовать функциональный API. Ссылка на это здесь . Это позволяет создавать сложную топологию, такую ​​как большее количество входов и выходов, с нестандартными формами и топологиями. Надеюсь, это будет полезно!

...