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,horizontal_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')