作者|Nouman
编译|VK
来源|Towards Data Science
在这篇文章中,我将教你建立你自己的网页应用程序,它将接受你的狗的图片,并输出其品种。准确率超过80%!
我们将使用深度学习来训练一个模型的数据集的狗图像与他们的品种,以学习的特征来区分每一个品种。
数据分析
数据集可以从这里下载(https://s3-us-west-1.amazonaws.com/udacity-aind/dog-project/dogImages.zip ) 。在成功加载和浏览数据集后,以下是关于数据的一些介绍:
-
犬种总数:133
-
狗图片总数:8351(训练集:6680,验证集:835,测试集:836)
-
最受欢迎的品种:阿拉斯加:96,博德牧羊犬:93
按图片数量排序的前30个品种如下:
我们还可以在这里看到一些狗的图片和它们的品种:
数据预处理
经过分析,为机器学习算法准备数据。我们将把每个图像作为一个numpy数组加载,并将它们的大小调整为224x224,因为这是大多数传统神经网络接受图像的默认大小。我们还将为图像的数量添加另一个维度
from keras.preprocessing import image
from tqdm import tqdm
def path_to_tensor(img_path):
'''将给定路径下的图像转换为张量'''
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
return np.expand_dims(x, axis=0)
def paths_to_tensor(img_paths):
'''将给定路径中的所有图像转换为张量'''
list_of_tensors = [path_to_tensor(img_path) for img_path in tqdm(img_paths)]
return np.vstack(list_of_tensors)
最后,我们将使用ImageDataGenerator对图像进行动态缩放和增强
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,
horizontal_flip=True,
vertical_flip=True,
rotation_range=20)
valid_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255.)
test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255.)
train_generator = train_datagen.flow(train_tensors