此文章是本人看了吴恩达的深度学习与神经网络后所做的课后作业。
本人编程的过程中发现了吴恩达所提供的课后作业的某些地方有些许错误,或是某些库中的函数已被淘汰。
本文基于吴恩达课程所提供的代码进行了些许更新与改进。
并且在最后测试图片时发现,识别准确率着实很低(尽管在测试集中的准确率达到了70%, 但本人重新找了很多与猫无关的照片,发现都会被识别为猫,可见这一模型的鸡肋)
O、前期准备
0.1 训练集与测试集
https://download.csdn.net/download/Hubert321/12661358
0.2 所需标准库
本文所需标准库:
import numpy as np
import matplotlib.pyplot as plt
import h5py
import cv2
一、读取数据集
首先,你需要调用h5py库中的函数来读取h5文件中的数据(h5文件中存储了图片信息)
将train_catvnoncat.h5与test_catvnoncat.h5文件放置与工程文件一起即可。
#读取数据集
def load_dataset():
train_dataset = h5py.File('train_catvnoncat.h5', "r")
train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features
train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels
test_dataset = h5py.File('test_catvnoncat.h5', "r")
test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features
test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels
classes = np.array(test_dataset["list_classes"][:]) # the list of classes
train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))
return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes
#读取数据集
train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset()
在本题所读取的训练数据集中,共有209张图片,在测试训练集中,共有50张图片。每张图片为64*64大小的RGB图片。
其中,train_set_x_orig 中存储了训练集中每张图片的信息,train_set_y中存储了训练集中每张图片”是否为猫“的信息。test_set_x_orig和test_set_y同理。classes中存储的是 [b’non-cat’ b’cat’]
所以,train_set_x_orig.shape = (209, 64, 64, 3), train_set_y.shape = (1,209), test_set_x_orig = (50,64,64,3), test_set_y = (1,50), classes = (2,)
二、图片预处理
首先要将每张图片的矩阵信息转化为向量,也就是将(64,