【问题标题】:Comparing Sklearn with Keras -- Getting Small Error with Keras将 Sklearn 与 Keras 进行比较——使用 Keras 出现小错误
【发布时间】:2020-03-12 02:34:32
【问题描述】:

我正在测试下面的代码。

#%matplotlib inline
import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.model_selection import cross_validate
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegressionCV


iris = sns.load_dataset("iris")
iris.head()

sns.pairplot(iris, hue='species')

X = iris.values[:, 0:4]
y = iris.values[:, 4]

train_X, test_X, train_y, test_y = train_test_split(X, y, train_size=0.5, random_state=0)

lr = LogisticRegressionCV()
lr.fit(train_X, train_y)

pred_y = lr.predict(test_X)
print("Test fraction correct (Accuracy) = {:.2f}".format(lr.score(test_X, test_y)))
# Test fraction correct (Accuracy) = 0.93


import keras
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.utils import np_utils


train_y_ohe = pd.get_dummies(train_y)
test_y_ohe = pd.get_dummies(test_y)


model = Sequential()
model.add(Dense(16, input_shape=(4,)))
model.add(Activation('sigmoid'))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')


loss, accuracy = model.evaluate(test_X, test_y_ohe, show_accuracy=True, verbose=0)
print("Test fraction correct (Accuracy) = {:.2f}".format(accuracy))

在倒数第二行代码之前一切正常。

当我尝试运行时:

loss, accuracy = model.evaluate(test_X, test_y_ohe, show_accuracy=True, verbose=0)

我收到此错误:

TypeError: evaluate() got an unexpected keyword argument 'show_accuracy'

我做了一些研究,发现“show_accuracy=True”可能在不久前就贬值了。现在有没有其他方法可以做到这一点?如何评估和打印模型的准确性?

我在这里找到了代码示例:

https://blog.fastforwardlabs.com/2016/02/24/hello-world-in-keras-or-scikit-learn-versus.html

【问题讨论】:

    标签: python python-3.x machine-learning keras


    【解决方案1】:

    show_accuracy 参数在新版本的 keras 中已弃用,从 model.evaluate() 中删除此参数并在 model.compile() 中使用 metrics=['accuracy'] 代替

    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    
    # fit model
    train_y_ohe = pd.get_dummies(train_y)
    model.fit(train_X, train_y_ohe,epochs=1000,batch_size=20)
    
    loss, accuracy = model.evaluate(test_X, test_y_ohe, verbose=0)
    print("Test fraction correct (Accuracy) = {:.2f}".format(accuracy))
    
    #Test fraction correct (Accuracy) = 0.97
    

    【讨论】:

    • 啊!我明白我做错了什么!现在它是有道理的,有点。我现在看到的唯一问题是 Keras 的准确率是 28% 左右。我预计神经网络模型的准确率约为 98% 或 99%。知道为什么准确性如此糟糕吗?这是违反直觉的。
    • 您在评估之前忘记拟合模型,我已经更新了我的答案,拟合得到 97% 的准确率
    • 是的,是的。我现在看到了。我刚刚将您的更改纳入我的脚本中。现在一切就绪!再次感谢!!
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多