Я новичок в глубоком обучении Keras. Я настраиваю модель нейронной сети в Keras, чьи входы xi (каждый вход имеет пару переменных) предварительно обрабатываются меньшими плотными слоями сети. После этого меньший плотный слой выдает две новые переменные xf (например, кодировщик), которые объединяются и затем служат входными данными для более крупной плотной сети.
На уровнях предварительной обработки, поскольку это один и тот же слой, работающий с каждым входом xi, мне было интересно, можно ли его эффективно закодировать с помощью цикла.
Я пробовал с циклом for, но, похоже, он не работает, поскольку такие тензорные объекты не поддерживают назначение элементов. Итак, я написал это следующим простым способом, и код работает нормально. Однако это написано для 5 входов; на практике количество входных данных — это большая переменная, которая может доходить до 500. Поэтому я ищу эффективный метод.
shared_dense_lvl1 = Dense(4, activation='sigmoid')
shared_dense_lvl2 = Dense(4, activation='sigmoid')
shared_dense_lvl3 = Dense(2, activation='sigmoid')
x1i = Input(shape=(2,))
x11 = shared_dense_lvl1(x1i)
x12 = shared_dense_lvl2(x11)
x1f = shared_dense_lvl3(x12)
x2i = Input(shape=(2,))
x21 = shared_dense_lvl1(x2i)
x22 = shared_dense_lvl2(x21)
x2f = shared_dense_lvl3(x22)
x3i = Input(shape=(2,))
x31 = shared_dense_lvl1(x3i)
x32 = shared_dense_lvl2(x31)
x3f = shared_dense_lvl3(x32)
x4i = Input(shape=(2,))
x41 = shared_dense_lvl1(x4i)
x42 = shared_dense_lvl2(x41)
x4f = shared_dense_lvl3(x42)
x5i = Input(shape=(2,))
x51 = shared_dense_lvl1(x5i)
x52 = shared_dense_lvl2(x51)
x5f = shared_dense_lvl3(x52)
xy0 = concatenate([x1f, x2f, x3f, x4f, x5f])
xy = Dense(2, activation='relu',name='xy')(xy0)
y1 = Dense(50, activation='sigmoid',name='y1')(xy)
y2 = Dense(50, activation='sigmoid',name='y2')(y1)
y3 = Dense(250, activation='sigmoid',name='y3')(y2)
merged = Model(inputs=[x1i,x2i,x3i,x4i,x5i],outputs=[y3])