一. Python的numpy库
作业过程中需要注意的点:
1.字符串要用引号引起来
2.除法运算的分母有多项时要用括号括起来
一般情况下不会使用math库,因为输入大部分都是矩阵、向量等,用numpy库会更方便。
3.row vector行向量,Numpy与math的区别在于解决矩阵或向量问题,而非单个的实数等。
4.要注意写乘号,为不能直接写s(1-s),要写成s*(1-s),否则会报错ndarry不能callable.
5.存在问题:在这里把一张图片reshape成一个列向量,也就是说,把RGB三维向量,转成一维向量,image.shape[0]*image.shap[1]*image.shape[2],是一个3X5X4的向量
6.Normalizing rows:
np.linalg.norm,linalg=linear+algebra
norm(x, ord=None, axis=None, keepdims=False)
①ord=None:默认情况下,是求整体的矩阵元素平方和,再开根号。
②axis:处理类型
axis=1表示按行向量处理,求多个行向量的范数
axis=0表示按列向量处理,求多个列向量的范数
axis=None表示矩阵范数。
③keepding:是否保持矩阵的二维特性
True表示保持矩阵的二维特性,False相反。
如:
按照行进行求和然后求平方根的计算。
第一行:3^2+4^2=25,开根号就是5
第二行:2^2+6^2+4^2=4+36+16=56,开根号是根号下56.
二、Logistic Regression进行图片分类
1.步骤:
①初始化参数
②计算代价函数和梯度
③梯度下降进行优化
2.Python Imaging Library (PIL)有很多格式的图片,可用作测试集
numpy.squeeze(a,axis = None)
1)a表示输入的数组;
2)axis用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;
3)axis的取值可为None 或 int 或 tuple of ints, 可选。若axis为空,则删除所有单维度的条目;
4)返回值:数组
5) 不会修改原数组;
https://docs.scipy.org/doc/numpy/reference/generated/numpy.squeeze.html
3.具体操作步骤
①导入包
②问题称述回顾
导入数据,其中要注意的是np.squeeze()函数,如果不使用的话可能造成图片无法显示,即删除单维数据,弄成秩为1以上的数据。
预处理数据集的步骤:
- 理清楚问题中数据的维度(训练集、测试集、相片的横纵像素等)
- 重塑数据集的维度,每个例子的向量为(num_px * num_px * 3, 1)
其中一个机智的做法是:
A trick when you want to flatten a matrix X of shape (a,b,c,d) to a matrix X_flatten of shape (b∗∗c∗∗d, a) is to use:
X_flatten = X.reshape(X.shape[0], -1).T # X.T is the transpose of X
- 标准化数据
③学习算法的构建
使用logistic回归,原理如下:
用到的主要公式为:
第一步:定义函数
如:sigmoid函数
第二步:初始化参数
w = np.zeros((dim,1),dtype=np.int),注意当确定零矩阵的维度时,其中若有变量,则需要在后申明数据类型,如整型等。
用法:zeros(shape, dtype=float, order='C')
返回:返回来一个给定形状和类型的用0填充的数组;
参数:shape:形状
dtype:数据类型,可选参数,默认numpy.float64
dtype类型:t ,位域,如t4代表4位
b,布尔值,true or false
i,整数,如i8(64位)
u,无符号整数,u8(64位)
f,浮点数,f8(64位)
c,浮点负数,
o,对象,
s,a,字符串,s24
u,unicode,u24
order:可选参数,c代表与c语言类似,行优先;F代表列优先
第三步:前后馈神经网络
注意在预测时对每个元素的写法,a[0,i]