关于python:Python中的卷积神经网络CNN入门

48次阅读

共计 2146 个字符,预计需要花费 6 分钟才能阅读完成。

卷积神经网络(Convolutional Neural Networks, CNN)是一类特地实用于解决图像数据的深度学习模型。在 Python 中,咱们能够应用风行的深度学习库 TensorFlow 和 Keras 来创立和训练一个 CNN 模型。在本文中,咱们将介绍如何应用 Keras 创立一个简略的 CNN 模型,并用它对手写数字进行分类。

1. 筹备数据集

咱们将应用 MNIST 数据集,这是一个罕用的手写数字数据集。Keras 库提供了一个不便的函数来加载 MNIST 数据集。数据集蕴含 60000 个训练样本和 10000 个测试样本,每个样本是一个 28×28 的灰度图像。

from tensorflow.keras.datasets import mnist

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

接下来,咱们须要对数据进行预处理。咱们将图像数据归一化到 0 - 1 之间,并将标签数据进行 one-hot 编码:

train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype("float32") / 255

test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype("float32") / 255

from tensorflow.keras.utils import to_categorical

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

2. 创立 CNN 模型

咱们将应用 Keras 创立一个简略的 CNN 模型,包含卷积层、池化层、全连贯层等。模型的构造如下:

  • 卷积层:应用 32 个 3 ×3 的卷积核,激活函数为 ReLU;
  • 池化层:应用 2 ×2 的最大池化;
  • 卷积层:应用 64 个 3 ×3 的卷积核,激活函数为 ReLU;
  • 池化层:应用 2 ×2 的最大池化;
  • 全连贯层:蕴含 128 个神经元,激活函数为 ReLU;
  • 输入层:蕴含 10 个神经元,激活函数为 softmax。
from tensorflow.keras import layers
from tensorflow.keras import models

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation="relu"))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation="relu"))
model.add(layers.Dense(10, activation="softmax"))

3. 训练 CNN 模型

咱们将应用训练数据集训练 CNN 模型,并在测试数据集上评估模型性能。咱们将应用穿插熵损失函数和 Adam 优化器,训练 10 个 epoch。

model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])

model.fit(train_images, train_labels, epochs=10, batch_size=64)

test_loss, test_acc = model.evaluate(test_images, test_labels)
print("Test accuracy: {:.2f}%".format(test_acc * 100))

4. 应用 CNN 模型进行预测

训练好 CNN 模型后,咱们能够用它对新的图像数据进行预测。上面咱们将随机抉择一个测试图像,并应用模型进行预测。

import numpy as np
import matplotlib.pyplot as plt

index = np.random.randint(0, len(test_images))
image = test_images[index]

plt.imshow(image.reshape(28, 28), cmap="gray")
plt.show()

predictions = model.predict(np.expand_dims(image, axis=0))
predicted_label = np.argmax(predictions)

print("Predicted label:", predicted_label)

上述代码将展现一个随机抉择的手写数字图像,并输入模型预测的后果。

这就是如何在 Python 中应用 Keras 创立和训练一个简略的 CNN 模型进行手写数字分类。在理论利用中,能够依据需要调整 CNN 模型的构造和参数以优化性能。

正文完
 0