Tensorflow实现手写数字识别

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 模型架构 * 具有10个神经元,对应10个类别(0-9的数字)。 * 使用softmax激活函数,对多分类问题进行概率归一化。 * 输出层 (Dense): * 具有64个神经元。 * 激活函数为ReLU。 * 全连接层 (Dense): * 将二维数据展平成一维,为全连接层做准备。 * 展平层 (Flatten): * 第三层卷积层有64个过滤器。 * 使用3x3的卷积核。 * 激活函数为ReLU。 * 卷积层 (Conv2D): * 池化大小为2x2。 * 最大池化层 (MaxPooling2D): * 第二层卷积层有64个过滤器。 * 使用3x3的卷积核。 * 激活函数为ReLU。 * 卷积层 (Conv2D): * 池化大小为2x2。 * 通过池化操作减小特征图的尺寸,同时保留最重要的信息。 * 最大池化层 (MaxPooling2D): * 第一层卷积层有32个过滤器(filters)。 * 使用3x3的卷积核。 * 激活函数为ReLU。 * 输入形状为28x28的单通道图像(黑白图像)。 * 卷积层 (Conv2D): |

python 复制代码
import tensorflow as tf

from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist

# 载入 MNIST 数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

# 数据预处理
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255

train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

# 构建神经网络模型
model = models.Sequential([
    # 第一层:卷积层
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),

    # 第二层:最大池化层
    layers.MaxPooling2D((2, 2)),

    # 第三层:卷积层
    layers.Conv2D(64, (3, 3), activation='relu'),

    # 第四层:最大池化层
    layers.MaxPooling2D((2, 2)),

    # 第五层:卷积层
    layers.Conv2D(64, (3, 3), activation='relu'),

    # 将二维数据展平成一维
    layers.Flatten(),

    # 第六层:全连接层(密集层),64个神经元,ReLU激活函数
    layers.Dense(64, activation='relu'),

    # 输出层:全连接层,10个神经元(对应10个类别,0-9的数字),使用softmax激活函数
    layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_split=0.2)

# 在测试集上评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {test_acc}')

编译模型:

python 复制代码
model.compile( 
	optimizer,    # 优化器,用于配置模型的学习过程。常见的有 'adam'、'sgd' 等。
	loss,         # 损失函数,用于衡量模型在训练时的性能。常见的有 'categorical_crossentropy'、'mse' 等。 
	metrics=None  # 评估指标,用于监控训练和测试性能。可以是一个字符串或字符串列表。例如,'accuracy'。
 )

optimizer(优化器):

优化器决定了模型如何进行参数更新,以最小化损失函数。常见的优化器包括 'adam'、'sgd'、'rmsprop' 等。不同的优化器可能适用于不同类型的问题。

loss(损失函数):

损失函数用于衡量模型在训练时的性能,即模型预测与实际标签之间的差异。对于不同的问题,需要选择合适的损失函数。例如,对于分类问题,常见的是 'categorical_crossentropy',而对于回归问题,可能是 'mse'(均方误差)。

metrics(评估指标):

评估指标用于监控模型的性能。在训练和测试过程中,会输出这些指标的值。例如,'accuracy' 表示模型的准确性。你可以传递一个字符串或一个字符串列表,以同时监控多个指标。

相关推荐
Light Gao7 分钟前
AI 对话助手如何实现动态交互?一文讲清 AG-UI、SSE、组件与工具调用
人工智能·ui·交互·大语言模型·sse·智能体·ag-ui
曲径海盗20 分钟前
【Python 学习第 32 天】字符串基础
python·学习笔记·编程入门
丁希希哇22 分钟前
Transformer中的注意力机制(Attention)
人工智能·机器学习·transformer·大语言模型
国际学术会议-杨老师27 分钟前
2027年人文发展、城市管理与数字化社会国际会议(HUCD 2027)
大数据·人工智能·人文发展
田里的水稻35 分钟前
PyTorch_torchvision---数据集下载\TensorBoard可视化
人工智能·pytorch·python·深度学习·机器学习
科技每日热闻37 分钟前
电气设备综合维保服务商怎么选?从预防性维护到数字化运维,看懂五个关键能力——企业选择维保合作伙伴,不能只看“坏了能不能修”,更要看能否覆盖资产与系统的长期运营
大数据·运维·人工智能
Dotrust东信创智42 分钟前
HIL台架上的“无人夜班“:东信创智用AI重塑汽车软件测试全链路——测试不再是项目的瓶颈,而是交付的底气
人工智能·汽车
程序员正茂43 分钟前
Win11使用自定义训练集训练ncnn模型
python·yolo·图像识别·移动端·ncnn
zwd20051 小时前
Manim 画布尺寸与像素换算详解:frame_width、frame_height、pixel_width 和画质参数(0.21.0 实测)
python·分辨率·manim·数学动画·frame_width·manim教程
电子制造自留地1 小时前
AI服务器高多层PCB设计:阻抗控制、层间对位与孔金属化工程要点
大数据·网络·人工智能·科技·pcb工艺