繁体   English   中英

梯度下降损失和准确度不会因迭代而改变

[英]Gradient Descent loss and accuracy doesn't change through iteration

我正在使用keras来实现基本的CNN情感检测。 这是我的模型架构

def HappyModel(input_shape):
    X_Input = Input(input_shape)

    X = ZeroPadding2D((3,3))(X_Input)
    X = Conv2D(32, (7,7), strides=(1,1), name='conv0')(X)
    X = BatchNormalization(axis = 3, name='bn0')(X)
    X = Activation('relu')(X)

    X = MaxPooling2D((2,2), name='mp0')(X)

    X = Flatten()(X)
    X = Dense(1, activation='sigmoid', name='fc0')(X)
    model = Model(inputs = X_Input, outputs = X, name='hmodel')

    return model


happyModel = HappyModel(X_train.shape[1:])
happyModel.compile(Adam(lr=0.1) ,loss= 'binary_crossentropy', metrics=['accuracy'])
happyModel.fit(X_train, Y_train, epochs = 50, batch_size=16, validation_data=(X_test, Y_test))

似乎模型损失和准确性在每个时期步骤中根本不会改变。 感觉就像梯度下降卡在当地最小值上,如下所示: https//i.imgur.com/9As8v0c.png

尝试过使用Adam和SGD优化器,学习率为.1和.5,仍然没有运气。

事实证明,如果我改变编译方法命令参数,模型将很好地happyModel.compile(optimizer = 'adam' ,loss= 'binary_crossentropy', metrics=['accuracy'])训练时代happyModel.compile(optimizer = 'adam' ,loss= 'binary_crossentropy', metrics=['accuracy'])

Keras文档说如果我们以这种方式编写参数,它将使用adam的默认参数( https://keras.io/optimizers/)keras.optimizers.Adam(lr keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)

但是,如果我将模型编译方法更改为默认参数happyModel.compile(Adam(lr=0.001, beta_1=0.9, beta_2=0.999, decay=0.0),loss= 'binary_crossentropy', metrics=['accuracy'])

准确性和损失仍然存在。 在Keras上两个不同的Adam优化器实现有什么区别?

您可以在官方keras-team页面上查看已关闭的问题: https//github.com/keras-team/keras/issues/5564

您可能有语法问题,因为这两种方式并不完全等效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM