给我以python为基础的卷积神经网络代码,训练集是两个文件夹里的灰度图片,分为keyong和bukeyong两类,测试集是一个文件夹的灰度图片,通过已有的神经网络模型,实现将测试集的图片进行分类,并计算出准确率,
时间: 2024-04-29 13:20:56 浏览: 91
以下是以Python为基础的卷积神经网络代码,实现对两类灰度图片进行分类,并计算出准确率。代码中使用了Keras框架,训练集和测试集的数据需要自行准备。
```python
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
# 定义超参数
batch_size = 32
epochs = 50
num_classes = 2
input_shape = (256, 256, 1)
# 构建卷积神经网络模型
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 准备数据集
train_data_dir = 'train'
test_data_dir = 'test'
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=input_shape[:2],
batch_size=batch_size,
color_mode='grayscale',
class_mode='categorical')
test_generator = test_datagen.flow_from_directory(
test_data_dir,
target_size=input_shape[:2],
batch_size=batch_size,
color_mode='grayscale',
class_mode='categorical')
# 训练模型
model.fit_generator(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
epochs=epochs,
validation_data=test_generator,
validation_steps=test_generator.samples // batch_size)
# 测试模型并计算准确率
test_generator = test_datagen.flow_from_directory(
test_data_dir,
target_size=input_shape[:2],
batch_size=batch_size,
color_mode='grayscale',
class_mode='categorical',
shuffle=False)
filenames = test_generator.filenames
nb_samples = len(filenames)
y_true = test_generator.classes
y_pred = model.predict_generator(test_generator, steps=np.ceil(nb_samples/batch_size))
y_pred_cls = np.argmax(y_pred, axis=1)
accuracy = np.sum(y_pred_cls == y_true) / nb_samples
print('Accuracy:', accuracy)
```
在上述代码中,我们先定义了一些超参数,包括批量大小、训练轮数、类别数和输入图像的形状。然后构建了一个简单的卷积神经网络模型,包括两个卷积层、两个池化层和两个全连接层。接着,我们使用Keras的ImageDataGenerator类来准备训练集和测试集的数据,并将它们传递给模型的fit_generator方法进行训练。最后,我们再次使用测试集的数据,通过模型的predict_generator方法进行预测,并计算出准确率。
需要注意的是,上述代码中的训练集和测试集需要按照不同类别分别存放在两个文件夹里,命名为keyong和bukeyong。同时,由于我们使用了灰度图像,因此在ImageDataGenerator类的实例化中需要设置color_mode为'grayscale'。
阅读全文