在tensorflow 框架下,编写卷积神经网络,实现手写数字图片识别问题
时间: 2023-06-26 19:04:43 浏览: 122
Python大作业-基于卷积神经网络的手写数字识别系统源码.zip
好的,下面是一个简单的卷积神经网络模型,用于手写数字图片识别问题。
首先,我们需要导入必要的库和数据集:
```python
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.datasets import mnist
# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 将像素值缩放到 [0, 1] 范围内
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0
# 将标签转换为 one-hot 编码
y_train = tf.one_hot(y_train, depth=10)
y_test = tf.one_hot(y_test, depth=10)
# 将数据集转换为 TensorFlow Dataset 对象
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test))
# 打乱训练集并分批次
train_dataset = train_dataset.shuffle(buffer_size=1024).batch(64)
```
然后,我们定义卷积神经网络模型:
```python
model = keras.Sequential(
[
layers.Input(shape=(28, 28, 1)),
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(10, activation="softmax"),
]
)
```
这个模型包含两个卷积层和两个池化层,以及一个全连接层和一个输出层。我们使用了 `ReLU` 激活函数和 `softmax` 输出层。
最后,我们编译模型并开始训练:
```python
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(train_dataset, epochs=10, validation_data=test_dataset)
```
这个模型在训练集上的准确率可以达到 99% 左右,在测试集上的准确率可以达到 98% 左右。
阅读全文