写一个完整的基于神经网络的垃圾分类代码
时间: 2023-08-30 22:06:35 浏览: 84
使用神经网络的方法进行垃圾分类
好的,以下是一个基于Keras和TensorFlow的垃圾分类代码示例:
```python
# 导入必要的库
import os
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 定义训练数据和验证数据的目录
train_dir = 'garbage_classification_data/train'
validation_dir = 'garbage_classification_data/validation'
# 定义图片的大小和批次大小
img_height = 224
img_width = 224
batch_size = 32
# 使用Keras的ImageDataGenerator进行数据扩充和预处理
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest'
)
validation_datagen = ImageDataGenerator(rescale=1./255)
# 使用flow_from_directory方法读取训练数据和验证数据
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical'
)
validation_generator = validation_datagen.flow_from_directory(
validation_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical'
)
# 定义模型结构
model = keras.Sequential([
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(128, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(128, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Flatten(),
keras.layers.Dense(512, activation='relu'),
keras.layers.Dense(6, activation='softmax')
])
# 编译模型
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy']
)
# 训练模型
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
validation_data=validation_generator,
validation_steps=validation_generator.samples // batch_size,
epochs=30
)
# 保存模型
model.save('garbage_classification_model.h5')
```
上述代码中,我们使用了Keras的ImageDataGenerator进行数据扩充和预处理,使用flow_from_directory方法读取训练数据和验证数据,定义了一个包含4个卷积层和2个全连接层的神经网络模型,并使用Adam优化器和交叉熵损失函数进行编译和训练,最后保存了训练好的模型。
需要注意的是,由于Keras和TensorFlow的版本更新较快,上述代码可能需要根据实际情况进行一定的修改和调整。
阅读全文