keras分类之二分类(Cat and dog)

 

1. 数据准备

    在文件夹下分别建立训练目录train,验证目录validation,测试目录test,每个目录下建立dogs和cats两个目录,在dogs和cats目录下分别放入拍摄的狗和猫的图片,图片的大小可以不一样。

2. 数据读取  

 

# 存储数据集的目录
base_dir = 'E:/python learn/dog_and_cat/data/'
 
# 训练、验证数据集的目录
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')
test_dir = os.path.join(base_dir, 'test')

 
# 猫训练图片所在目录
train_cats_dir = os.path.join(train_dir, 'cats')

 
# 狗训练图片所在目录
train_dogs_dir = os.path.join(train_dir, 'dogs')

 
# 猫验证图片所在目录
validation_cats_dir = os.path.join(validation_dir, 'cats')
 
# 狗验证数据集所在目录
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
 
print('total training cat images:', len(os.listdir(train_cats_dir))) 
print('total training dog images:', len(os.listdir(train_dogs_dir))) 
print('total validation cat images:', len(os.listdir(validation_cats_dir))) 
print('total validation dog images:', len(os.listdir(validation_dogs_dir)))

3. 模型建立

# 搭建模型
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu',
                 input_shape=(150, 150, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
 
print(model.summary())
 
model.compile(loss='binary_crossentropy',
              optimizer=RMSprop(lr=1e-4),
              metrics=['acc'])

4. 模型训练

train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
 
train_generator = train_datagen.flow_from_directory(
    train_dir,  # target directory
    target_size=(150, 150),  # resize图片
    batch_size=20,
    class_mode='binary'
)
 
validation_generator = test_datagen.flow_from_directory(
    validation_dir,
    target_size=(150, 150),
    batch_size=20,
    class_mode='binary'
)
 
for data_batch, labels_batch in train_generator:
    print('data batch shape:', data_batch.shape)
    print('labels batch shape:', labels_batch.shape)
    break
 
hist = model.fit_generator(
    train_generator,
    steps_per_epoch=100,
    epochs=10,
    validation_data=validation_generator,
    validation_steps=50
)
 
model.save('cats_and_dogs_small_1.h5')

5. 模型评估

acc = hist.history['acc']
val_acc = hist.history['val_acc']
loss = hist.history['loss']
val_loss = hist.history['val_loss']
 
epochs = range(len(acc))
 
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
 
plt.legend()
plt.figure()
 
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.legend()
plt.show()

6. 预测

imagename = 'E:/python learn/dog_and_cat/data/validation/dogs/dog.2026.jpg'
test_image = image.load_img(imagename, target_size = (150, 150))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0)
result = model.predict(test_image)

if result[0][0] == 1:
   prediction ='dog'
else:
    prediction ='cat'
    
print(prediction)

代码在spyder下运行正常,一般情况下,可以将文件分为两个部分,一部分为Train.py,包含深度学习模型建立、训练和模型的存储,另一部分Predict.py,包含模型的读取,评价和预测

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
猫狗分类识别是通过构建一个图像分类网络,使用训练样本集合中的猫狗图像训练该模型,以实现对测试样本集合中动物的识别并将其分为猫类或者狗类。在图像识别研究领域,常用的数据集之一是Cat_vs_Dogs(猫狗识别数据集),该数据集包含了大量的猫和狗的照片,可以用来验证算法的效果。 以下是一个实现猫狗分类识别的Python代码示例: ```python import tensorflow as tf from tensorflow import keras from keras.preprocessing.image import ImageDataGenerator # 设置训练集和测试集的路径 train_dir = 'path_to_train_directory' test_dir = 'path_to_test_directory' # 数据增强 train_datagen = ImageDataGenerator( rescale=1./255, # 归一化 rotation_range=40, # 随机旋转范围 width_shift_range=0.2, # 随机水平平移范围 height_shift_range=0.2, # 随机垂直平移范围 shear_range=0.2, # 随机错切变换范围 zoom_range=0.2, # 随机缩放范围 horizontal_flip=True, # 随机水平翻转 fill_mode='nearest' # 填充像素的策略 ) test_datagen = ImageDataGenerator(rescale=1./255) # 加载训练集和测试集数据 train_generator = train_datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=20, class_mode='binary' # 二分类 ) test_generator = test_datagen.flow_from_directory( test_dir, target_size=(150, 150), batch_size=20, class_mode='binary' ) # 构建模型 model = keras.models.Sequential([ keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 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(1, activation='sigmoid') ]) # 编译模型 model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit_generator( train_generator, steps_per_epoch=100, epochs=100, validation_data=test_generator, validation_steps=50 ) # 保存模型 model.save('cat_dog_classifier.h5') ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值