Можно ли сверточную сеточную классификацию Keras добавить 1D дополнительную функцию?
Я построил успешную сверточную сеть, используя Keras, классифицирующую определенную активность мозга по ЭЭГ. Однако я хотел бы улучшить его, добавив дополнительную функцию, которая, как мы знаем, предсказывает эту активность мозга; age, который, конечно, является одномерным массивом другого масштаба. Как мне это сделать?
Могу ли я добавить возраст к "изображению" в качестве дополнительного измерения? Или я должен использовать возраст, чтобы классифицировать активность мозга в другой модели, а затем объединить две модели? Или есть варианты?
> X.shape
(745,13,60,1) (Trials, channels, frequencies, extra_dim)
> age.shape
(745,)
Спасибо за любой совет и подумать со мной!
Лучший,
Ханнеке
1 ответ
Не связано: почему дополнительный тусклый? Вы используете Conv2D? Вы, вероятно, должны получить лучшие результаты с Conv1D, с (exams, timeSteps, channels)
,
Также: вы убедились, что используете data_format='channels_first'
? Керас по умолчанию data_format='channels_last'
,
Ответ для Conv2D:
Вы должны выбрать форму взаимодействия двух наборов данных. Это взаимодействие может быть очень креативным, и нет никаких правил. Две возможности:
- Умножьте это 1D-значение где-нибудь, или добавьте, или подумайте о хороших операциях (требуется функциональная модель API с двумя входами).
- Добавить возраст в качестве дополнительного канала для каждого шага (мне нравится этот)
Добавление возраста в качестве дополнительного канала:
x_with_age = np.empty((745,14,60,1))
age = age.reshape((745,1,1,1))
x_with_age[:,:13] = X
x_with_age[:,-1:] = age
Тренируй модель используя x_with_age
в качестве ввода.
Если следовать предложению Conv1D:
#this is using channels_last, which is keras' default
#if your data is channels_first, then just invert the shapes below
X = should be something like (745, 60, 13)
x_with_age = np.empty((745,60,14))
age = age.reshape((745,1,1))
x_with_age[:,:,:13] = X
x_with_age[:,:,-1:] = age