-
h5py库
The h5py package is a Pythonic interface to the HDF5 binary data format. It lets you store huge amounts of numerical data, and easily manipulate that data from NumPy. For example, you can slice into multi-terabyte datasets stored on disk, as if they were real NumPy arrays.(from www.h5py.org)
h5py包是HDF5二进制数据格式的python接口。它允许您存储大量的数值数据,并可以轻松地从NumPy操作这些数据。例如,您可以将数据集分割成存储在磁盘上的多tb数据集,就好像它们是真正的NumPy数组一样。
在这个程序中是用来加载训练数据集的,数据集的保存格式为HDF Hierarchical Data Frame(是一种针对大量数据进行组织和存储的文件格式,大数据行业和人工智能行业都用它来保存数据)
-
skimage库
scikit-image is a collection of algorithms for image processing. It is available free of charge and free of restriction. We pride ourselves on high-quality, peer-reviewed code, written by an active community of volunteers.(from https://scikit-image.org)
scikit-image是一个图像处理算法的集合
在这个程序中用来缩放图片
-
load_dataset()函数
- h5py.File('file path', ‘r’) # 加载数据
- np.array(txxx_set['txxx_set'][:]) 【切片操作: [:]取整个对象 [:,1] #所有行的第1列数据 [1, :]取所有列的第一行数据】

- np_array.reshape((1, np_array.shape[0])) # 这里把标签类别的数据数组Y的维度从(x,)变成(1, x) 一维变为二维 图片数据依旧是origin 还是四维数组

转换为

实践了一下有些困惑如下圆括号的作用是什么 目前未解决


-
随便显示一张图片显示
plt.imshow(txxx_set[index])
-
打印各数据集变量的维度str(txxx_set.shape)
程序里的图片数据集(包括训练集和测试集)的维度都是四维分别是(样本数,图片宽,图片长,3个RGB通道)
标签数据集都是二维如(1, n)
-
对维度为四维的图片样本数据进行扁平化处理和转置处理
为方便后面进行矩阵运算
txxx_set_orig.reshape(txxx_set_orig.shape[0], -1).T 将(100, 64,64,3)的数据自动计算转换为(100, 64*64*3)维度 然后在进行转置处理T (100, 64*64*3)维度变为(64*64*3, 100) 这样的话每一列就是图片数据的所有特征,同一行就是所有图片数据的同一个位置的数据特征 就可方便后面的矩阵运算了 好嘞 到此这一步处理到此结束
-
对特征数据进行简单的标准化处理
将所有特征值除以255, 将数据值域标准化到[0,1]范围内
txxx_set_x = txxx_set_x_flatten / 255
-
接下来就是此程序重头戏了 开始为构建神经网络编写工具函数
- def sigmoid(z) 逻辑回归

- def initialize_with_zeros(dim) 初始化权重数组w和偏置/阈值b
- def propagate(w, b, X, Y) 执行前向传播计算成本cost以及反向传播,计算w和b的偏导数/梯度 以便用来后面的梯度下降


- def optimize(w, b, X, Y, epoch, l_r, print_cost) 执行梯度下降来更新参数w和b 达到优化目的
- def predict(w, b, X) 输入计算出来的w和b来对输入的待预测数据X来进行预测
- def model(X_train, Y_train, X_test, Y_test, epoch, l_r = 0.5, print_cost) 将1-5的函数组合起来构建最终的神经网络模型函数
-
实例化一个model对象
d = model(...........)
打印出成本 预测准确率等信息
-
查看图片预测是否正确
plt.imshow(txxx_set_x[:,index].reshape((num_px, num_px, 3))) (12288,1)维度转换为(64,64,3)长、宽、RGB通道图片数据才能显示出来
-
打印出成本随着训练次数增加时的变化情况
costs = np.squeeze(d['cost']) squeeze()从矩阵中,去掉维度为1的。例如一个矩阵是的shape是(n, 1),使用过这个函数后,结果为(n,) 这里从一维压缩还是为一维

到

-
预测自己的图片
image = np.array(plt.imread(file_path))
my_image = tf.resize(image, (num_px, num_px), mode='reflect').reshape((1, num_px*num_px*3)).T # 图片先缩放到64,64)再reshape到(1,64*64*3)再转置为(12288,1) 因为predict函数的输入就是(12288,1) 所以要把自己的图片也变换为同一个大小与格式
my_predicted_image = predict(d['w'], d['b'], my_image)
预测结果为: int(np.squeeze(my_predicted_image))))

本文介绍如何使用h5py和scikit-image库处理大规模图像数据,通过加载、预处理、构建神经网络并训练模型,实现图像识别任务。涵盖数据加载、图片缩放、数据扁平化、标准化、构建神经网络模型等关键步骤。

1719

被折叠的 条评论
为什么被折叠?



