У меня была идея улучшить нейронную сеть, которую я сейчас использую, но я новичок в машинном обучении, поэтому не знаю, возможно ли это реализовать, насколько это сложно или просто не стоит . Идея такая. У меня есть образец изображений, и я должен классифицировать их по сигналу и фону (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 для изображений с низким разрешением, но я не смог найти что-нибудь об этом. Если вы что-то знаете об этом, прокомментируйте и это.)