利用TensorFlow中的Keras模块建立卷积神经网络模型进行手写数字识别

该博客介绍了如何利用TensorFlow的Keras模块构建卷积神经网络(CNN)模型,以实现手写数字的识别。首先,加载必要的库,接着读取数据集,分离数据和标签,并对数据进行归一化处理。然后,将数据分割为训练集和测试集,并调整数据尺寸以适应模型输入。最后,搭建CNN模型并创建会话进行训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

载入所需要的包

from tensorflow import keras
import pandas as pd
from sklearn.model_selection import train_test_split

读取数据集

kmnist = pd.read_csv('kmnist.csv')

分离数据与标签

X = kmnist.values[:, :-1]
y = kmnist['label'].values

数据归一化

X = X/255

分割训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=100, random_state=10, stratify=y)

转换数据为适合模型输入的大小

X_train = X_train.reshape(500, 28, 28, 1)
X_test = X_test.reshape(100, 28, 28, 1)

建立模型

model = keras.Sequential([
        # 卷积层1
        keras.layers.Conv2D(filters=32,               #设置卷积核的数量为 32
                     kernel_size=3*3,       #设置卷积核的大小为 3x3
                     strides=(1, 1),           #设置卷积核的步长为 1
                     padding='same',           #设置卷积核的填充方式为“same”
                     activation='relu',        #设置卷积层的激活函数为“ReLU”
                     input_shape=(28, 28, 1)), #设置输入的形状
        
        # 池化层1
        keras.layers.MaxPool2D(pool_size=(2, 2),   #设置池化窗口的大小为 2x2
                       strides=(2, 2),     #设置池化的步长为 2
                       padding='valid'),   #设置池化层的填充方式为“valid”
        
        # 卷积层2
        keras.layers.Conv2D(filters=64,          #设置卷积核的数量为 64
                       kernel_size=3*3,  #设置卷积核的大小为 3x3
                       strides=(1,1),      #设置卷积核的步长为 1
                       padding='SAME',      #设置卷积核的填充方式为“same”
                       activation='relu'),  #设置卷积层的激活函数为“ReLU”
        
        # 池化层2
        keras.layers.MaxPool2D(pool_size=(2, 2),  #设置池化窗口的大小为 2x2
                        strides=(2, 2),    #设置池化的步长为 2
                        padding='VALID'),  #设置池化层的填充方式为“valid”
        
        # 扁平化
        keras.layers.Flatten(),
        
        # 全连接层1
        keras.layers.Dense(units=120,             #设置全连接层的神经元个数为 120
                      activation='relu'),    #设置全连接层的激活函数为“ReLU”
        
        # 输出层
        keras.layers.Dense(units=10,              #设置输出层的神经元个数
                      activation='softmax')])#设置输出层的激活函数为“softmax”

创建会话

with tf.Session() as sess:
    # 定义优化方法和损失函数
    model.compile(loss='sparse_categorical_crossentropy',  # 设置损失函数为稀疏Softmax交叉熵
               optimizer='adam',                        # 设置优化方法为“Adam”
               metrics=['accuracy'])                    # 设置优化时检测的指标为“accuracy”

    # 训练模型
    model.fit(x=X_train, y=y_train, batch_size=20, epochs=5)

    # 模型预测
    y_pred = model.predict_classes(x=X_test)

    # 模型评价
    testing_score = model.evaluate(x=X_test, y=y_pred)[1]
    print("模型在测试集上的准确率:",testing_score)
Epoch 1/5
20/500 [>.............................] - ETA: 9s - loss: 2.2966 - acc: 0.1000 60/500 [==>...........................] - ETA: 3s - loss: 2.3232 - acc: 0.1000 100/500 [=====>........................] - ETA: 2s - loss: 2.2911 - acc: 0.1600 140/500 [=======>......................] - ETA: 1s - loss: 2.2663 - acc: 0.1857 180/500 [====&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值