Python - 使用 keras 进行图像分类

pythonserver side programmingprogramming

图像分类是一种使用 − 等方法将图像分类到其各自类别的方法

  • 从头开始训练小型网络
  • 使用 VGG16 对模型的顶层进行微调

示例

#首先,包含以下库:
# 导入所有必要的库
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras import backend as K
#此处,train_data_dir 是训练数据集目录。 validation_data_dir 是验证数据的目录。nb_train_samples 是训练样本总数。nb_validation_samples 是验证样本总数。
img_width, img_height = 224, 224
train_data_dir = 'v_data/train'
validation_data_dir = 'v_data/test'
nb_train_samples =400
nb_validation_samples = 100
epochs = 10
batch_size = 16
#检查图像格式
if K.image_data_format() == 'channels_first':
   input_shape = (3, img_width, img_height)
else:
   input_shape = (img_width, img_height, 3)
model = Sequential()
#Conv2D 是将图像卷积为多个图像的层
model.add(Conv2D(32, (2, 2), input_shape=input_shape))
#Activation 是激活函数。
model.add(Activation('relu'))
#MaxPooling2D 用于从给定大小的矩阵中最大池化值,并且同样用于接下来的 2 层。
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (2, 2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
#MaxPooling2D 用于从给定大小的矩阵中最大池化值,并且同样用于接下来的 2 层。
model.add(Flatten())
#Dense 用于使其成为完全连接的模型,并且是
#隐藏层。
model.add(Dense(64))
model.add(Activation('relu'))
#Dropout 用于避免数据集过度拟合。
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
#此处使用编译函数,涉及损失、优化器
#和指标的使用。此处使用的损失函数是 binary_crossentropy,
#使用的优化器是 rmsprop。
model.compile(loss='binary_crossentropy',optimizer='rmsprop', metrics=['accuracy'])
#ImageDataGenerator 重新缩放图像,在某些范围内应用剪切,缩放图像 #并对图像进行水平翻转。此 ImageDataGenerator 包含图像的所有可能
#orientation
#。
train_datagen = ImageDataGenerator(rescale=1. / 255,shear_range=0.2, zoom_range=0.2,horizo​​ntal_flip=True)
test_datagen = ImageDataGenerator(rescale=1. / 255)
#train_datagen.flow_from_directory 是用于
#从 train_dataset 目录准备数据的函数 Target_size 指定
#图像的目标大小。
train_generator = train_datagen.flow_from_directory( train_data_dir,
target_size=(img_width, img_height),batch_size=batch_size,class_mode='binary')
validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_width, img_height),
batch_size=batch_size, class_mode='binary')
#fit_generator 用于将数据拟合到上面建立的模型中,
#其他使用的因素是 steps_per_epochs 告诉我们模型将针对训练数据执行的次数。
#epochs 告诉我们模型将在前向和反向传递中进行训练的次数。
#validation_data 用于将验证/测试数据输入到#模型中。
#validation_steps 表示验证/测试样本的数量。
model.fit_generator(train_generator,steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs, validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size)
#保存模型
model.save_weights('ImgmodelKeras_saved.h5')

相关文章