【问题标题】:classification mnist binary class分类 mnist 二进制类
【发布时间】:2018-07-28 13:12:47
【问题描述】:

我想为 MNIST 数据集实现神经网络,我在网上找到了很多示例。但我想使用不同的方法研究这个问题:我想创建 10 个 NN(作为类的数量),其中我只对一个类与其他类进行分类(例如:第一个 NN 只分析“1”类与其他)。 这只是一个练习(我是python新手,我想学习)。

这实际上是我的python代码,你有什么建议修改mi代码以获得我上面解释的类分离吗?

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
import numpy
from keras.utils import np_utils
numpy.random.seed()


(X_train, y_train), (X_test, y_test) = mnist.load_data()

num_pixels = X_train.shape[1] * X_train.shape[2]
X_train.shape[1],X_train.shape[2],X_train.shape[3])
X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32')
X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32')

X_train = X_train / 255
X_test = X_test / 255
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
print(y_test)
num_classes = y_test.shape[1]
def baseline_model():
model = Sequential()
model.add(Dense(num_pixels, input_dim=num_pixels,           kernel_initializer='normal', activation='relu'))
model.add(Dense(num_classes, kernel_initializer='normal', activation='softmax'))        

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model


 model = baseline_model()

 model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=3,     batch_size=200, verbose=2)

 model.summary()
 scores = model.evaluate(X_test, y_test, verbose=1)
 print("Baseline Error: %.2f%%" % (100-scores[1]*100))

【问题讨论】:

    标签: python machine-learning neural-network classification mnist


    【解决方案1】:

    首先您应该将y_trainy_test 转换为二进制输出。您将希望为十个类中的每一个循环执行此操作,但以下是您将如何为其中之一执行此操作,例如 5:

    y_train_binary = (y_train == 5).astype(np.int)
    y_test_binary = (y_test == 5).astype(np.int)
    

    现在每个y_train的例子都是1到10之间的一个数字,所以这里我们将其转换为0或1对应于正类是否正确。

    然后您想调整模型的输出以支持二元分类。这可以通过使用具有 sigmoid 激活和二元交叉熵损失的单个密集输出神经元来完成:

    model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))   
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    

    【讨论】:

    • 非常感谢伊姆兰!我不明白为什么我使用 5 ...你能解释一下吗?此外,np.int 被标记为“未定义”,我必须导入任何其他库吗?抱歉我的问题很糟糕,我是 Python 的新手
    • 这只是一个示例 - y_train 中的每个条目都是介于 110 之间的数字。在我的示例中,我们将5 转换为array([0, 0, 0, 0, 1, 0, 0, 0, 0, 0])。您应该将load_data() 下面的所有内容都包装在一个循环中,为每个类输出不同的模型。
    • 谢谢,np.int?
    • (y_train == 5) 为您提供一个布尔数组,astype(np.int) 将其转换为1s 和0s。
    • 完美我理解,但我的编辑将 np 标记为未定义。为什么?需要导入库吗?
    猜你喜欢
    • 2016-06-01
    • 2020-11-13
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2017-12-02
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多