手写数字识别与Keras

我正在尝试学习Keras。我在这里看到了用于识别手写数字的机器学习代码这里(也给出了这里)。它似乎从头开始编写了前馈、SGD和反向传播方法。我只想知道是否可以使用Keras编写这个程序?朝这个方向迈出的第一步将不胜感激。


回答:

你可以先用这个来了解MNIST数据集如何用于多层感知器(MLP)。Keras MNIST教程。随着你的进展,你可以研究卷积神经网络(CNN)如何在MNIST数据集上工作。

我将描述你附在评论中的Keras代码的过程

# 步骤1:组织数据
batch_size = 128   # 这将60k张图像分成128张一批,通常人们使用100。你可以自己决定
num_classes = 10   # 你的最终层。基本上是0到9(10个类别)
epochs = 20        # 20次'运行'。你可以增加或减少以查看准确性的变化。通常MNIST的准确性在10-20个epochs时达到峰值。
# 数据,划分为训练和测试集
(x_train, y_train), (x_test, y_test) = mnist.load_data()  # x_train - 你的训练图像,y_train - 训练标签;x_test - 测试图像,y_test - 测试标签。通常人们在50k训练图像,10k测试图像上进行训练。
x_train = x_train.reshape(60000, 784) # 每个MNIST图像是28x28像素。所以你将它展平为28x28 = 784的数组。60k训练图像
x_test = x_test.reshape(10000, 784)   # 同样,10k测试图像
x_train = x_train.astype('float32')   # 用于浮点数
x_test = x_test.astype('float32')
x_train /= 255                        # 用于归一化。每张图像的'黑暗度'范围在0-255之间,所以你希望将其范围缩小到0 - 1以供神经网络使用
x_test /= 255
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# 将类别向量转换为二进制类别矩阵
y_train = keras.utils.to_categorical(y_train, num_classes)  # 独热编码。所以当你的神经网络训练好后,你对5(示例)的预测将看起来像这样 [0000010000](最终层)。
y_test = keras.utils.to_categorical(y_test, num_classes)
# 步骤2:创建MLP模型
model = Sequential()     
model.add(Dense(512, activation='relu', input_shape=(784,)))    # 第一隐藏层,512个神经元,激活函数relu,输入784数组
model.add(Dropout(0.2))                                         # 在训练过程中,层有20%的概率'关闭'某些神经元
model.add(Dense(512, activation='relu'))                        # 与上面相同
model.add(Dropout(0.2))
model.add(Dense(num_classes, activation='softmax'))   # 最终层,10个神经元,softmax是一个概率函数,用于给出输入图像的最佳概率
model.summary()
# 步骤3:创建模型编译
model.compile(loss='categorical_crossentropy',              
              optimizer=RMSprop(),              
              metrics=['accuracy'])
# 10个类别 - 使用categorical_crossentropy。如果是2个类别,可以使用binary_crossentropy;优化器 - RMSprop,你可以将其更改为ADAM,SGD等;度量 - 准确性
# 步骤4:训练模型
history = model.fit(x_train, y_train,                    
                    batch_size=batch_size,                    
                    epochs=epochs,                    
                    verbose=1,                    
                    validation_data=(x_test, y_test))
# 训练在这里进行。在每个批次大小上进行20次运行,然后在测试集上验证你的结果。
# 步骤5:查看你在测试数据上的结果
score = model.evaluate(x_test, y_test, verbose=0)
# 打印出分数
print('Test loss:', score[0])
print('Test accuracy:', score[1])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注