用于图像分类的CNN Python代码2025 年 1 月 5 日 | 阅读 21 分钟 我们来分解卷积神经网络(CNN)在图像分类中的组成部分,而不提供具体代码。一个典型的图像分类 CNN 由以下元素组成:
CNN 的架构和参数可以根据你数据集的特定特征和分类任务的要求进行定制。调整可能包括添加更多层、更改滤波器大小或使用不同的正则化技术。 使用 Python 构建用于图像分类的卷积神经网络 (CNN) 通常涉及使用 TensorFlow 或 PyTorch 等深度学习库。以下是一个使用 TensorFlow 和 Keras 进行图像分类的示例代码: Python 输出 Epoch 1/5 938/938 [==============================] - 38s 40ms/step - loss: 0.1563 - accuracy: 0.9525 - val_loss: 0.0452 - val_accuracy: 0.9853 Epoch 2/5 938/938 [==============================] - 37s 39ms/step - loss: 0.0443 - accuracy: 0.9863 - val_loss: 0.0311 - val_accuracy: 0.9897 Epoch 3/5 938/938 [==============================] - 37s 39ms/step - loss: 0.0312 - accuracy: 0.9900 - val_loss: 0.0313 - val_accuracy: 0.9899 Epoch 4/5 938/938 [==============================] - 36s 38ms/step - loss: 0.0242 - accuracy: 0.9922 - val_loss: 0.0294 - val_accuracy: 0.9909 Epoch 5/5 938/938 [==============================] - 36s 38ms/step - loss: 0.0194 - accuracy: 0.9938 - val_loss: 0.0283 - val_accuracy: 0.9912 313/313 [==============================] - 2s 6ms/step - loss: 0.0283 - accuracy: 0.9912 Test accuracy: 0.9911999702453613 此示例使用了 MNIST 数据集,该数据集包含手写数字。你可以通过相应地修改数据加载和预处理步骤来替换为你自己的数据集。 在运行代码之前,请确保已安装 TensorFlow。你可以使用以下命令进行安装: 根据你具体的图像分类任务调整架构、超参数和数据集。 以下是使用 CIFAR-10 数据集的示例,该数据集包含 10 个不同类别的 60,000 张 32x32 颜色图像: Python 输出 Epoch 1/10 782/782 [==============================] - 35s 45ms/step - loss: 1.5414 - accuracy: 0.4386 - val_loss: 1.2319 - val_accuracy: 0.5620 Epoch 2/10 782/782 [==============================] - 35s 45ms/step - loss: 1.1730 - accuracy: 0.5821 - val_loss: 1.0828 - val_accuracy: 0.6142 Epoch 3/10 782/782 [==============================] - 35s 45ms/step - loss: 1.0163 - accuracy: 0.6414 - val_loss: 1.0004 - val_accuracy: 0.6461 Epoch 4/10 782/782 [==============================] - 35s 45ms/step - loss: 0.9174 - accuracy: 0.6759 - val_loss: 0.9413 - val_accuracy: 0.6674 Epoch 5/10 782/782 [==============================] - 35s 45ms/step - loss: 0.8532 - accuracy: 0.6993 - val_loss: 0.9089 - val_accuracy: 0.6812 Epoch 6/10 782/782 [==============================] - 35s 45ms/step - loss: 0.8001 - accuracy: 0.7197 - val_loss: 0.8763 - val_accuracy: 0.6971 Epoch 7/10 782/782 [==============================] - 35s 45ms/step - loss: 0.7575 - accuracy: 0.7354 - val_loss: 0.8899 - val_accuracy: 0.6944 Epoch 8/10 782/782 [==============================] - 35s 45ms/step - loss: 0.7224 - accuracy: 0.7466 - val_loss: 0.8625 - val_accuracy: 0.7025 Epoch 9/10 782/782 [==============================] - 35s 45ms/step - loss: 0.6887 - accuracy: 0.7577 - val_loss: 0.8488 - val_accuracy: 0.7091 Epoch 10/10 782/782 [==============================] - 35s 45ms/step - loss: 0.6606 - accuracy: 0.7672 - val_loss: 0.8561 - val_accuracy: 0.7077 313/313 [==============================] - 2s 7ms/step - loss: 0.8561 - accuracy: 0.7077 Test accuracy: 0.7076999549865723 在此示例中,模型是 CNN 的简化版本。你可能需要根据你具体的图像分类问题调整架构和超参数。 如果你还没有安装 TensorFlow,请确保安装它,使用: 请随意用你自己的数据集替换 CIFAR-10 数据集并相应地调整模型架构。构建用于图像分类的 CNN 的原理保持不变。 以下是使用 Fashion MNIST 数据集的示例,该数据集包含 10 个时尚类别的 28x28 灰度图像: Python 输出 Epoch 1/5 938/938 [==============================] - 38s 40ms/step - loss: 0.5445 - accuracy: 0.8035 - val_loss: 0.4086 - val_accuracy: 0.8546 Epoch 2/5 938/938 [==============================] - 36s 39ms/step - loss: 0.3484 - accuracy: 0.8746 - val_loss: 0.3312 - val_accuracy: 0.8786 Epoch 3/5 938/938 [==============================] - 36s 39ms/step - loss: 0.2998 - accuracy: 0.8900 - val_loss: 0.3006 - val_accuracy: 0.8930 Epoch 4/5 938/938 [==============================] - 37s 39ms/step - loss: 0.2705 - accuracy: 0.9004 - val_loss: 0.2943 - val_accuracy: 0.8934 Epoch 5/5 938/938 [==============================] - 36s 38ms/step - loss: 0.2473 - accuracy: 0.9096 - val_loss: 0.2964 - val_accuracy: 0.8928 313/313 [==============================] - 2s 6ms/step - loss: 0.2964 - accuracy: 0.8928 Test accuracy: 0.892799973487854 此示例遵循与之前的示例类似的结构,但使用了 Fashion MNIST 数据集。一如既往,请根据你具体的数据集和问题调整代码,相应地调整模型架构、超参数和训练参数。 确保如果还没有安装 TensorFlow,请安装它: 请根据你具体的图像分类任务自由尝试不同的数据集和模型架构。 让我们考虑一个使用“猫狗”数据集的示例,这是一个二分类问题,目标是将图像分类为包含猫或狗。以下是使用 TensorFlow 和 Keras 的简单示例: Python 输出 Found 2000 images belonging to 2 classes. Found 1000 images belonging to 2 classes. Epoch 1/10 63/63 [==============================] - 52s 817ms/step - loss: 0.7171 - accuracy: 0.5073 - val_loss: 0.6906 - val_accuracy: 0.5180 Epoch 2/10 63/63 [==============================] - 49s 781ms/step - loss: 0.6812 - accuracy: 0.5618 - val_loss: 0.6433 - val_accuracy: 0.6220 Epoch 3/10 63/63 [==============================] - 49s 785ms/step - loss: 0.6523 - accuracy: 0.6190 - val_loss: 0.6454 - val_accuracy: 0.6180 Epoch 4/10 63/63 [==============================] - 49s 779ms/step - loss: 0.6143 - accuracy: 0.6633 - val_loss: 0.5737 - val_accuracy: 0.7140 Epoch 5/10 63/63 [==============================] - 49s 783ms/step - loss: 0.5689 - accuracy: 0.7053 - val_loss: 0.5684 - val_accuracy: 0.6990 Epoch 6/10 63/63 [==============================] - 50s 791ms/step - loss: 0.5259 - accuracy: 0.7315 - val_loss: 0.5485 - val_accuracy: 0.7140 Epoch 7/10 63/63 [==============================] - 50s 793ms/step - loss: 0.4822 - accuracy: 0.7748 - val_loss: 0.4939 - val_accuracy: 0.7680 Epoch 8/10 63/63 [==============================] - 50s 791ms/step - loss: 0.4506 - accuracy: 0.7930 - val_loss: 0.5263 - val_accuracy: 0.7460 Epoch 9/10 63/63 [==============================] - 50s 790ms/step - loss: 0.4105 - accuracy: 0.8160 - val_loss: 0.4874 - val_accuracy: 0.7640 Epoch 10/10 63/63 [==============================] - 49s 784ms/step - loss: 0.3713 - accuracy: 0.8393 - val_loss: 0.5115 - val_accuracy: 0.7680 32/32 [==============================] - 10s 301ms/step - loss: 0.5115 - accuracy: 0.7680 Test accuracy: 0.7680000066757202 确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 Keras 的 `ImageDataGenerator` 进行数据增强,这有助于防止过拟合。 如果你还没有安装 TensorFlow,请安装它: 请随意根据你具体的图像分类任务和数据集自定义模型架构和超参数。 以下是使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例。此示例假定你的数据集已组织到文件夹中,每个文件夹代表不同的类别。 Python 输出 Found 2000 images belonging to 2 classes. Found 1000 images belonging to 2 classes. Epoch 1/10 63/63 [==============================] - 42s 650ms/step - loss: 0.7143 - accuracy: 0.5025 - val_loss: 0.6872 - val_accuracy: 0.5050 Epoch 2/10 63/63 [==============================] - 41s 651ms/step - loss: 0.6847 - accuracy: 0.5485 - val_loss: 0.6806 - val_accuracy: 0.5700 Epoch 3/10 63/63 [==============================] - 41s 651ms/step - loss: 0.6768 - accuracy: 0.5730 - val_loss: 0.6511 - val_accuracy: 0.6210 Epoch 4/10 63/63 [==============================] - 41s 650ms/step - loss: 0.6631 - accuracy: 0.5970 - val_loss: 0.6687 - val_accuracy: 0.5870 Epoch 5/10 63/63 [==============================] - 41s 650ms/step - loss: 0.6504 - accuracy: 0.6240 - val_loss: 0.6393 - val_accuracy: 0.6340 Epoch 6/10 63/63 [==============================] - 41s 651ms/step - loss: 0.6320 - accuracy: 0.6405 - val_loss: 0.6304 - val_accuracy: 0.6430 Epoch 7/10 63/63 [==============================] - 41s 650ms/step - loss: 0.6182 - accuracy: 0.6525 - val_loss: 0.6234 - val_accuracy: 0.6530 Epoch 8/10 63/63 [==============================] - 41s 651ms/step - loss: 0.6151 - accuracy: 0.6590 - val_loss: 0.6115 - val_accuracy: 0.6640 Epoch 9/10 63/63 [==============================] - 41s 651ms/step - loss: 0.6011 - accuracy: 0.6775 - val_loss: 0.6104 - val_accuracy: 0.6700 Epoch 10/10 63/63 [==============================] - 41s 651ms/step - loss: 0.5824 - accuracy: 0.6890 - val_loss: 0.6045 - val_accuracy: 0.6680 32/32 [==============================] - 5s 162ms/step - loss: 0.6045 - accuracy: 0.6680 Test accuracy: 0.6680000429153442 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 这是一个基本示例,根据你的数据集和任务,你可能需要考虑使用更高级的架构、微调预训练模型或尝试不同的数据增强技术。 让我们探索一个使用更高级架构和迁移学习以及流行的 MobileNetV2 模型的示例。我们将使用 TensorFlow 和 Keras API 以及 ImageDataGenerator 来实现高效的数据加载和增强。 Python 输出 Test accuracy: [accuracy_value] 确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 MobileNetV2 作为基础模型,它已经在 ImageNet 上进行了预训练。通过在顶部添加几个层,你可以微调模型以适应你的特定分类任务。 请随意尝试不同的预训练模型(例如,ResNet、InceptionV3)并根据你的数据集和要求调整超参数。 让我们考虑一个使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用 EfficientNetB0 模型进行迁移学习。EfficientNet 模型以其效率和有效性而闻名。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 EfficientNetB0 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的 EfficientNet 变体或其他预训练模型。 让我们探索一个使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用不同的架构(例如 InceptionV3 模型)进行迁移学习。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 InceptionV3 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的预训练模型并调整参数。 让我们探索一个使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用 Xception 模型进行迁移学习。Xception 是另一个强大的卷积神经网络架构。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 Xception 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的预训练模型并调整参数。 让我们探索一个使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用 VGG16 模型进行迁移学习。VGG16 是一个广泛使用的卷积神经网络架构。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 VGG16 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的预训练模型并调整参数。 让我们探索一个使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用 ResNet50 模型进行迁移学习。ResNet50 是一个深度卷积神经网络架构,在图像分类任务中以其有效性而闻名。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 ResNet50 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的预训练模型并调整参数。 以下是使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用 DenseNet121 模型进行迁移学习。DenseNet 以其密集连接模式而闻名,可以有效地重用特征。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 DenseNet121 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的预训练模型并调整参数。 让我们探索一个使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用 NASNetMobile 模型进行迁移学习。NASNetMobile 以其用于高效模型设计的神经架构搜索而闻名。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 NASNetMobile 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的预训练模型并调整参数。 以下是使用 TensorFlow 和 Keras API 对自定义数据集进行图像分类的示例,并使用 MobileNetV2 模型进行迁移学习。MobileNetV2 专为移动和边缘设备设计,在准确性和效率之间取得了良好的平衡。这是一个示例: Python 输出 Test accuracy: [accuracy_value] 请确保将 'path/to/train' 和 'path/to/test' 替换为你的训练和测试数据集的实际路径。此示例使用 MobileNetV2 作为基础模型,它已经在 ImageNet 上进行了预训练。根据你具体的图像分类任务和数据集调整模型架构、超参数和数据预处理。 请根据你的需求自由尝试不同的预训练模型并调整参数。 下一个主题比较 Python 中的字典 |
我们请求您订阅我们的新闻通讯以获取最新更新。