我想为MNIST数据集实现一个神经网络,我在网上找到了很多例子。但我想用一种不同的方法来研究这个问题:我想创建10个NN (作为类的数量),在这个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))发布于 2018-02-18 17:32:04
首先,您应该将y_train和y_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'])https://stackoverflow.com/questions/48846894
复制相似问题