MLP和带keras的网络之间的区别,为什么它们给出不同的结果?

问题描述

对于相同的文本分类,我建立了两个网络。它们应该相同,但是使用不同的工具。 他们得到相同的输入(使用Doc2Vec构建的大小为300的向量)。它们都具有3个隐藏层,每个隐藏层包含100个神经元,其激活和sgd有所不同。

-MLP方法给我的准确度约为71%

-Keras模型是随机分类器!

编辑:此外(非常重要!),keras模型似乎与最初的模型并不相同 在每种情况下,我总是得到与第一个相同的精度和相同的损失。 损失值非常非常低!损失:5.9577e-08

有人可以告诉我我怎么了吗?

MLP代码:

MLP2=MLPClassifier(activation='logistic',alpha=0.0005,batch_size='auto',hidden_layer_sizes=(100,100,100),learning_rate='adaptive',max_iter=600,solver='adam').fit(train_x,train_y)

MLPscore2 = MLP2.score(test_x,test_y)

Keras的代码:

keras.backend.clear_session()
inputs = Input(shape=(300))
x = Dense(100,activation='relu')(inputs) #100 hidden units with tanh activation
x = Dense(100,activation='tanh')(x)
x = Dense(100,activation='relu')(x)
outputs = Dense(1,activation='sigmoid')(x) #output layer with sigmoid activation
model = Model(inputs=inputs,outputs=outputs,name='Vector_text')

model.summary()


eta = 0.3
decay_rate = 0.005

model.compile(
    loss='categorical_crossentropy',optimizer=keras.optimizers.SGD(learning_rate=eta,momentum=0.0,decay=decay_rate),metrics=['accuracy']
    )




epochs = 10
batch_size = 65


X_train,X_valid,y_train,y_valid = model_selection.train_test_split(train_x,train_y,test_size = 1000,random_state = SEED)

history = model.fit(
        X_train,epochs=epochs,batch_size=batch_size,validation_data=(X_valid,y_valid),verbose=1,#default - show progress bar
        shuffle = True
    )

#evaluate model on the test set
test_loss,test_acc = model.evaluate(test_x,test_y)

解决方法

在没有其他上下文的情况下,我只能提出一些可能的罪魁祸首:

  • x = Dense(100,activation='tanh')(x)“ tanh”激活功能只能输出-1和+1范围内的数字。为此,请尝试'relu'或什至更好的'elu''selu'

  • 使用max_iter时,MLPClassifier
  • epochskeras.models.Model的{​​{1}}相同。 Keras模型只有10个,而solver=adam有600个。

  • 学习率可能太高。对于没有批量归一化的模型,MLPCLassifier很少见。尝试减少它。

  • eta=0.3,但batch_size=65的批量大小为200。

使用批处理规范化,除非您有明确的理由不这样做。这样可以加快融合速度,并且您可能获得比其他更高的学习率。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...