代码之家  ›  专栏  ›  技术社区  ›  olivier Noumbi

这个keras神经网络的准确率是0%

  •  1
  • olivier Noumbi  · 技术社区  · 7 年前

    我试图对MNIST数据集的子集进行二元分类。目标是预测样本是6还是8。因此,每个样本有784个像素特征,数据集中有8201个样本。我构建了一个由一个输入层、两个隐藏层和一个输出层组成的网络。我使用sigmoid作为激活函数来输出layer和relu,用于隐藏层。我不知道为什么我最终得到了0%的准确率。

    #import libraries
    from keras.models import Sequential
    from keras.layers import Dense
    import pandas as pd
    import numpy as np
    from sklearn.model_selection import train_test_split
    import os
    np.random.seed(7)
    
    os.chdir('C:/Users/olivi/Documents/Python workspace')
    
    #data loading
    data = pd.read_csv('MNIST_CV.csv')
    
    #Y target label
    Y = data.iloc[:,0]
    
    #X: features
    X = data.iloc[:,1:]
    
    X_train, X_test, y_train, y_test = train_test_split(X, Y,test_size=0.25,random_state=42)
    
    # create model
    model = Sequential()
    model.add(Dense(392,kernel_initializer='normal',input_dim=784, 
    activation='relu'))
    model.add(Dense(196,kernel_initializer='normal', activation='relu'))
    model.add(Dense(98,kernel_initializer='normal', activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    
    
    model.compile(loss = 'binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.summary()
    
    
    # Training the model
    model.fit(X_train, y_train, epochs=100, batch_size=50)
    
    print(model.predict(X_test,batch_size= 50))
    
    score = model.evaluate(X_test, y_test)
    print("\n Testing Accuracy:", score[1])
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Clarence Leung    7 年前

    如果使用二进制交叉熵,则标签应为0或1(分别表示“不是数字6”或“是数字6”)。

    如果您当前的Y目标标签是值6和8,则它将失败。

        2
  •  0
  •   razimbres    7 年前

    一旦选择了MNIST的子集,就必须确定样本中有多少不同类别的数字(包括训练集和测试集)。

    因此:

    classes=len(np.unique(Y))
    

    然后应热编码Y:

    Y_train = np_utils.to_categorical(y_train, classes)
    Y_test = np_utils.to_categorical(y_test, classes)
    

    之后,将神经网络的最后一层更改为:

    model.add(Dense(classes, activation='sigmoid'))
    

    最后:

    model.predict_classes(X_test,batch_size= 50)
    

    确保培训和测试集的Y课程数相同。

    预测后,使用np找到6和8的位置。其中(),选择此子样本并测试您的准确性。