使用Python、TensorFlow和Keras来进行垃圾分类的操作方法

1. 垃圾分类背景

2019 年 7 月 1 日,我国垃圾分类管理办法正式实施。垃圾分类、垃圾处理成为社会关注的热点问题。根据国家标准,垃圾可以分为:可回收物、有害垃圾、湿垃圾和干垃圾四类。但实际在处置垃圾时,经常会出现垃圾分类不规范,进而造成对大气、水体、土地的污染,并给人类带来健康隐患。

为了更好地推广垃圾分类,近年来深度学习领域涌现出了许多智能垃圾分类算法。本文将介绍使用 Python、TensorFlow 和 Keras 对垃圾进行分类的操作方法和相关代码。

2. 数据集介绍

本文使用的垃圾分类数据集是 Kaggle 上一个名为 Garbage classification 的数据集,该数据集共有 2 万多张图片,包括: glass、paper、cardboard、plastic、metal、trash 六类垃圾。在本文中,我们将使用一部分数据集进行模型的训练和预测。

2.1 数据集处理

首先,我们需要安装并导入必要的 Python 包,如:NumPy、Matplotlib、PIL 和 tensorflow。

import os

import numpy as np

import matplotlib.pyplot as plt

from PIL import Image

import tensorflow as tf

from tensorflow.keras.preprocessing.image import ImageDataGenerator

接下来,我们需要进行数据的预处理操作。首先,将图像数据转换为模型可以输入的数组数据。我们定义了一个函数 load_image(img_path) 用于将图片数据转化为数组信息。

def load_image(img_path):

img = Image.open(img_path)

img = img.resize((224, 224))

img_array = np.array(img)

return img_array

接下来,我们加载数据集。由于该数据集包含六类垃圾,我们使用 Keras 提供的数据增强技术 ImageDataGenerator 生成增强数据集。

batch_size = 16

train_datagen = ImageDataGenerator(

rescale=1./255,

shear_range=0.2,

zoom_range=0.2,

horizontal_flip=True,

validation_split=0.2)

train_generator = train_datagen.flow_from_directory(

'garbage_classification/train',

target_size=(224, 224),

batch_size=batch_size,

class_mode='categorical',

subset='training')

validation_generator = train_datagen.flow_from_directory(

'garbage_classification/train',

target_size=(224, 224),

batch_size=batch_size,

class_mode='categorical',

subset='validation')

3. 模型构建

我们使用卷积神经网络模型进行训练,该模型由一些卷积层、池化层、全连接层和 Dropout 函数层组成。以下是一个卷积神经网络模型的示例代码。

model = tf.keras.models.Sequential([

tf.keras.layers.Conv2D(64, (3, 3), activation='relu', input_shape=(224, 224, 3)),

tf.keras.layers.MaxPooling2D(2, 2),

tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),

tf.keras.layers.MaxPooling2D(2, 2),

tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),

tf.keras.layers.MaxPooling2D(2, 2),

tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),

tf.keras.layers.MaxPooling2D(2, 2),

tf.keras.layers.Flatten(),

tf.keras.layers.Dense(256, activation='relu'),

tf.keras.layers.Dropout(0.5),

tf.keras.layers.Dense(6, activation='softmax')

])

model.summary()

4. 模型训练及评估

在进行模型训练时,我们选择 Adam 作为优化器,使用 categorical_crossentropy 作为损失函数。以下是一个训练模型的示例代码。

model.compile(optimizer=tf.keras.optimizers.Adam(),

loss='categorical_crossentropy',

metrics=['accuracy'])

epochs = 50

history = model.fit(

train_generator,

validation_data=validation_generator,

epochs=epochs,

verbose=1)

训练完成后,我们可以使用训练好的模型进行预测操作。以下是预测模型的代码。

test_img = load_image('garbage_classification/test/glass/glass1.jpg')

print(test_img.shape)

test_img = np.expand_dims(test_img, axis=0)

print(test_img.shape)

prediction = model.predict(test_img)

print(prediction)

categories = ['cardboard', 'glass', 'metal', 'paper', 'plastic', 'trash']

print("Predicted Category: ", categories[np.argmax(prediction)])

运行以上代码,输出结果如下:

(224, 224, 3)

(1, 224, 224, 3)

[[0. 0. 1. 0. 0. 0.]]

Predicted Category: metal

5. 结论

通过本文,我们了解了如何使用 Python、TensorFlow 和 Keras 对垃圾进行分类。我们对数据集进行了预处理操作,并使用卷积神经网络模型进行训练和评估。我们也学习了如何使用训练好的模型进行预测操作。下一步,我们可以尝试更换不同的模型和参数,以进一步提高分类的准确度。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签