写点什么

一文深度挖掘 AI 的图像分类能力!

用户头像
cv君
关注
发布于: 7 小时前
一文深度挖掘AI的图像分类能力!

嗨,大家好,我是 cv 君,欢迎来到 InfoQ 的专栏,我是人工智能领域小有名气的 cv 君,

学习完本系列,你能从调包侠到一个能独立打比赛的朋友周边的神!文章付费,不想让太多人白嫖!!!因为全部原创,珍贵!!

今天给大家来分享一下调参技巧,看完你会感谢我的~

今天第一节 介绍如何搭建一个自己的神经网络,

让他分辨猫狗,并且知道他是如何分类的!更有原创视频介绍!

猫狗分类,正式开始!看完,加油~

源代码和数据就在这~

欢迎大家往下看~不会后悔哦!

首先先恭迎大家, 这里能更好学习,变成神的关键一步:

https://pan.baidu.com/s/1Qu8iYqLUugv9qMgkXt0ypQ 提取码:1q20

今天开更~


干货满满!一开始我们就从实践项目开始,第一个重量级练手项目就是猫狗大战,我们计划分为三个部分来讲解,逐步提高我们的分类精度,在这个项目中,你将 get:

1、Keras 基本方法;2、基本网络设计;3、迁移学习思想;4、Dropout 作用及效果;5、数据增强作用及效果;6、集成方法的强大魅力!



专栏有趣的一课开始啦~


2014 年,Kaggle 举办了一项竞赛,以确定图像中包含猫还是狗。本项目将使用 Keras 创建 CNN,来测试精

度,继而使用迁移学习,进而应用图像增强。




接下来




在第 1 部分,我们将从一个基本的神经网络开始,该神经网络在预测图像包含猫还是狗时的准确率为 84%。然后,我们将添加 Dropout,并进行数据增强,以达到 92.8%的分类精度。


在第 2 部分中,我们将看到如何微调在 ImageNet 上进行预训练的网络,并利用迁移学习来达到 98.6%的准确度(获胜作品得分 98.9%)。


在第 3 部分中,更换使用 PyTorch 而不是 Keras 来构建集成模型,这些模型集成起来提供的预测能力比任何单个模型都更高,并且达到 99.1%的准确性。


猫狗大战第一节:

使用 Keras 手搭 CNN 加 Dropout 并数据增强可以达到 92.8%的分类精度

具体查看视频:https://pan.baidu.com/s/1Qu8iYqLUugv9qMgkXt0ypQ 提取码:1q20

数据集下载:在 Kaggle 网站搜索 cat vs dog 即可。

本章完整代码!代码讲解请看视频(文章首部):


from keras import layers, models, optimizers
import os
import tensorflow as tf
from keras.preprocessing import image
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
gpu_options = tf.GPUOptions(allow_growth=True)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
datagen = ImageDataGenerator(
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')
fnames = [os.path.join('./train_total/cat/', fname) for fname in os.listdir('./train_total/cat/')]
img_path = fnames[4] # Choose one image to augment
img = image.load_img(img_path, target_size=(224, 224)) # load image and resize it
x = image.img_to_array(img) # Convert to a Numpy array with shape (224, 224, 3)
x = x.reshape((1,) + x.shape)
i = 0
for batch in datagen.flow(x, batch_size=1):
plt.figure(i)
imgplot = plt.imshow(image.array_to_img(batch[0]))
i += 1
if i % 3 == 0:
break
plt.show()
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))
model.add(layers.MaxPool2D(2, 2))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPool2D(2, 2))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPool2D(2, 2))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPool2D(2, 2))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer=optimizers.RMSprop(lr=1e-4),
metrics=['acc'])
train_datagen = ImageDataGenerator(rescale=1./255)
# keras 数据增强
# 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)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'./train_total/',
target_size=(224, 224), # resize all images to 224 x 224
batch_size=80,
class_mode='binary') # because we use binary_crossentropy loss we need binary labels
validation_generator = test_datagen.flow_from_directory(
r'E:\python_file\Pytorch_Advanced\val_total',
target_size=(224, 224),
batch_size=80,
class_mode='binary')
history = model.fit_generator(
train_generator,
steps_per_epoch=320, # 50 batches in the generator, so it takes 320 batches to get to 16000 images
epochs=30,
validation_data=validation_generator,
validation_steps=90)
test_generator = test_datagen.flow_from_directory(
r'E:\python_file\Pytorch_Advanced\val_total',
target_size=(224, 224),
batch_size=50,
class_mode='binary')
test_loss, test_acc = model.evaluate_generator(test_generator, steps=90)
print('test acc:', test_acc)
model.save('models/cat_dog.h5')
datagen = ImageDataGenerator(
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')
复制代码





datagen = ImageDataGenerator(
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')
复制代码

后面继续优化~

欢迎关注专栏~

我是 cv 君

优质文章

有趣而生动

下期再见!

用户头像

cv君

关注

还未添加个人签名 2021.03.22 加入

还未添加个人简介

评论

发布
暂无评论
一文深度挖掘AI的图像分类能力!