• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

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']<i>本文来源gaodai$ma#com搞$代*码网2</i>
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)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:keras分类之二分类实例(Cat and dog)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址