猫狗大战
- 顾名思义,就是实现猫和狗的分类问题
- 数据集图像是大小不一的
- 数据集图像是彩色的
实现思路
- 处理数据集时,要对图像的大小进行统一缩放
- 将图片读取为像素矩阵,并转为卷积神经网络可以识别的形状
- 构建卷积神经网络,有卷积,有池化,有全连接
- 构建代价函数
- 构建优化器
- 迭代求出预测准确率
数据集
形如上述所示,共计25000张图片,这里做示范选取猫狗各500张。
代码实现
import tensorflow as tf
import numpy as np
import os
import cv2
import random
# 设置随机种子。(5分)
tf.set_random_seed(1)
# 猫狗数据文件夹路径
data_dir = r'data'
# 调用该方法,获取文件夹中猫狗的像素矩阵为数据,并为每条数据添加标签
def load_data(data_dir):
# 存放所有图片像素矩阵数据
data_all = []
# 存放其对应的标签
labels_all = []
# i 为每个图片数据的名字
for i in os.listdir(data_dir):
# 拼接路径 保证cv2读取正确
img = cv2.imread(os.path.join(data_dir, i))
# 将读取到的大小不一的图像进行统一缩放
img = cv2.resize(img, dsize=(128, 128))
# 转为数字矩阵
img_array = np.asarray(img)
img_array = np.reshape(img_array, (3, 128, 128))
# 直接对数据进行归一化
img_array = img_array / 127.5 - 1
# 将这个数据存放进列表
data_all.append(img_array)
# 因为图片的名字为'cat.1.jpg'等类型,所以对名字进行切割,选择第一部分,既是其对应的类型
label = i.split('.')[0]
# 将对应的类型,转为0,1,作0,1分类
if label == 'cat':
labels_all.append(1)
else:
labels_all.append(0)
# 将列表作为转为数组
data_all