Конкатенация слоев в Керасе - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь реализовать код из этой статьи и, будучи новичком в глубоком обучении, не могу полностью понять, что они сделали в создании «Широкой и глубокой нейронной сети (WDNN) путем объединения слоев». ,Вот функция, которую они использовали для генерации WDNN:

 def WDNN(data):
    input = Input(shape=(data.shape[1],))
    x = Dense(256, activation='relu', kernel_regularizer=regularizers.l2(1e-8))(input)
    x = BatchNormalization()(x)
    x = Dropout(0.5)(x)
    x = Dense(256, activation='relu', kernel_regularizer=regularizers.l2(1e-8))(x)
    x = BatchNormalization()(x)
    x = Dropout(0.5)(x)
    x = Dense(256, activation='relu', kernel_regularizer=regularizers.l2(1e-8))(x)
    x = BatchNormalization()(x)
    x = Dropout(0.5)(x)
    wide_deep = concatenate([input, x])
    preds = Dense(1, activation='sigmoid', kernel_regularizer=regularizers.l2(1e-8))(wide_deep)
    model = Model(input=input, output=preds)
    opt = Adam(lr=np.exp(-1.0 * 9))
    model.compile(optimizer=opt,
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    return model

Следуя рекомендациям в книге «Глубокое обучение с Keras», написанной разработчиком Keras, я предложил следующую функцию. Но я не могу понять, как исходная функция на самом деле использует сцепление и как я могу реализовать ее в своем собственном коде, чтобы выполнить то же самое? Любые намеки приветствуются.

def WDNN(data):
    model = models.Sequential()
    model.add(layers.Dense(256,  activation='relu', kernel_regularizer=regularizers.l2(1e-8), input_shape=(data.shape[1],)))
    model.add(layers.BatchNormalization())
    model.add(layers.Dropout(0.5))
    model.add(layers.Dense(256,  activation='relu', kernel_regularizer=regularizers.l2(1e-8)))
    model.add(layers.BatchNormalization())
    model.add(layers.Dropout(0.5))
    model.add(layers.Dense(256,  activation='relu', kernel_regularizer=regularizers.l2(1e-8)))
    model.add(layers.BatchNormalization())
    model.add(layers.Dropout(0.5))
    model.add(layers.Dense(1,  activation='sigmoid', kernel_regularizer=regularizers.l2(1e-8)))
    # Compile model
    opt = Adam(lr=np.exp(-1.0 * 9))
    model.compile(optimizer=opt,
          loss='binary_crossentropy',
          metrics=['accuracy'])
    return (model)
...