# -*- coding: utf-8 -*- # 读取Tensorflow2.X内置的mnist服饰数据集(注:如网速太慢,可用以下载好的数据集), # 构建多层神经网络分类模型,并输出预测准确率rv from __future__ import absolute_import ,division,print_function,unicode_literals import tensorflow as tf import numpy as np import os from PIL import Ima
时间: 2025-06-24 21:37:19 浏览: 40
### 构建基于 TensorFlow 2.X 的多层神经网络分类模型
以下是实现基于 TensorFlow 2.X 加载 MNIST 服饰数据集并构建多层神经网络分类模型的具体方法:
#### 数据准备
首先,需要加载 `fashion_mnist` 数据集。该数据集包含 70,000 张灰度图像,分为 10 类服装类别。
```python
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
# 加载 Fashion MNIST 数据集
fashion_mnist = tf.keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
# 归一化处理
train_images = train_images / 255.0
test_images = test_images / 255.0
```
以上代码展示了如何加载和预处理数据[^1]。归一化的目的是将像素值缩放到 `[0, 1]` 范围内,以便提高模型收敛速度。
---
#### 模型定义
接下来,定义一个多层神经网络模型。这里采用简单的全连接网络结构作为基础示例。
```python
model = models.Sequential([
layers.Flatten(input_shape=(28, 28)), # 将输入展平为一维向量
layers.Dense(128, activation='relu'), # 隐藏层,使用 ReLU 激活函数
layers.Dropout(0.2), # Dropout 层用于防止过拟合
layers.Dense(10, activation='softmax') # 输出层,使用 Softmax 进行多类分类
])
```
此部分代码实现了模型架构的设计[^3]。其中,`Flatten` 层负责将二维图像转换为一维张量;`Dense` 层则构成全连接网络的核心组件。
---
#### 编译与训练
完成模型设计后,需对其进行编译,并指定损失函数、优化器以及评价指标。
```python
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=10, validation_split=0.2)
```
此处采用了 Adam 优化算法来最小化稀疏交叉熵损失函数[^2]。同时,在训练过程中保留了 20% 的验证集以监控泛化性能。
---
#### 测试与评估
最后一步是对测试集进行预测,并计算最终的准确率。
```python
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'\nTest Accuracy: {test_acc}')
```
这段代码执行了模型在未见过的数据上的表现评估[^1]。通过调用 `evaluate` 方法可以直接获取到测试集上的损失值和准确率。
---
### 完整代码示例
综合上述各部分内容,完整的 Python 实现如下所示:
```python
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
# 数据加载与预处理
fashion_mnist = tf.keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
train_images, test_images = train_images / 255.0, test_images / 255.0
# 模型搭建
model = models.Sequential([
layers.Flatten(input_shape=(28, 28)),
layers.Dense(128, activation='relu'),
layers.Dropout(0.2),
layers.Dense(10, activation='softmax')
])
# 模型编译
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=['accuracy'])
# 训练过程
history = model.fit(train_images, train_labels, epochs=10, validation_split=0.2)
# 测试评估
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'\nTest Accuracy: {test_acc}')
```
---
阅读全文