初次学习卷积神经网络python代码(带注释)
时间: 2023-06-18 12:08:51 浏览: 102
以下是一个简单的卷积神经网络(CNN)的Python代码,带有注释来帮助理解。
```python
# 导入必要的库
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import mnist
# 加载MNIST数据集,包含60,000个训练图像和10,000个测试图像
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理,将像素值缩放到0到1之间,将标签转换为独热编码
x_train = x_train / 255.0
x_test = x_test / 255.0
y_train = tf.one_hot(y_train, 10)
y_test = tf.one_hot(y_test, 10)
# 定义CNN模型
model = tf.keras.Sequential([
# 添加卷积层,使用32个大小为3x3的过滤器,使用ReLU激活函数
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
# 添加最大池化层,使用2x2的窗口大小
tf.keras.layers.MaxPooling2D((2, 2)),
# 添加Flatten层,将图像展平为一维向量
tf.keras.layers.Flatten(),
# 添加全连接层,使用128个神经元,使用ReLU激活函数
tf.keras.layers.Dense(128, activation='relu'),
# 添加输出层,使用10个神经元,使用softmax激活函数
tf.keras.layers.Dense(10, activation='softmax')
])
# 编译模型,使用adam优化器和交叉熵损失函数
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型,使用批量大小为128,训练10个时期
model.fit(x_train.reshape(-1, 28, 28, 1), y_train, batch_size=128, epochs=10, validation_data=(x_test.reshape(-1, 28, 28, 1), y_test))
# 评估模型,在测试集上进行评估
test_loss, test_acc = model.evaluate(x_test.reshape(-1, 28, 28, 1), y_test)
print(f'Test accuracy: {test_acc}')
```
这个代码中,我们首先导入了必要的库,然后加载了MNIST数据集。我们进行了一些数据预处理,将像素值缩放到0到1之间,并将标签转换为独热编码。接下来,我们定义了一个简单的CNN模型。该模型包含一个卷积层、一个最大池化层、一个Flatten层、一个全连接层和一个输出层。我们使用adam优化器和交叉熵损失函数来编译模型。最后,我们使用训练集对模型进行训练,并在测试集上进行评估。
阅读全文