在keras中获得相同模型FFNN的不同结果

时间:2018-06-29 18:23:59

标签: keras keras-layer

我正在使用Keras建立基于FFNN(前馈神经网络)的模型。

我建立了第一个版本:

def mlp0(input_dim, loss):
    model = Sequential()
    model.add(Dropout(0.5, input_shape=(input_dim,)))
    model.add(Dense(512, activation='sigmoid'))
    model.add(Dense(1, activation='relu'))
    model.compile(loss=loss, optimizer=Adagrad())
    return model

这在k倍交叉验证中给了我很好的结果,但是当我对验证集进行预测时,性能很差。

所以我尝试了另一个版本。

def mlp1(input_dim, loss):
    inputs = keras.Input(shape=(input_dim,))
    x = keras.layers.Dropout(0.5)(inputs)
    x = keras.layers.Dense(512, activation='sigmoid')(x)
    outputs = keras.layers.Dense(1, activation='relu')(x)
    model = keras.Model(inputs, outputs)
    model.compile(loss=loss, optimizer=Adagrad())
    return model

第二个模型的交叉验证结果较差,但与验证集的结果兼容。

在我看来,它们是用不同方式构建的相同模型,但是由于某些原因,它们给了我不同的答案。我在做什么错了?

编辑:

这些模型的行为方式相同:

def mlp0(input_dim, loss):
    model = Sequential()
    model.add(Dense(512, activation='sigmoid',  input_shape=(input_dim,), kernel_regularizer=regularizers.l2(0.01)))
    model.add(Dense(1, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
    model.compile(loss=loss, optimizer=Adam())
    return model

import keras
from keras import regularizers

def mlp1(input_dim, loss):

    inputs = keras.Input(shape=(input_dim,))
    x = keras.layers.Dense(512, activation='sigmoid', kernel_regularizer=regularizers.l2(0.01))(inputs)
    outputs = keras.layers.Dense(1, activation='relu', kernel_regularizer=regularizers.l2(0.01))(x)
    model = keras.Model(inputs, outputs)
    model.compile(loss=loss, optimizer=Adam())
    return model

这些让我觉得在辍学的预测阶段有收获

0 个答案:

没有答案