1.利用python构建基本函数
使用向量化数据方法,提升代码运行效率
方法:使用numpy库中的dot()函数来计算和一般的for循环算法,比较其时间运行效率
np.dot()方法
#检验numpy已经安装且可以使用
import numpy as np
a=np.array([1,2,3,4])
print(a)
import time
#产生2组,每组1000000个随机数
a=np.random.rand(1000000)
b=np.random.rand(1000000)
#利用np.dot()来计算这两组数分别相乘,记录时间
tic=time.time()
c=np.dot(a,b)
toc=time.time()
print(c)
print("vectorized version:"+str(1000*(toc-tic))+"ms")
#利用for loop来计算这两组数
c=0
tic=time.time()
for i in range(1000000):
c+=a[i]*b[i]
toc=time.time()
print(c)
print("for loop:"+str(1000*(toc-tic))+"ms")
第一个梯度函数:
sigmoid_derivative(x)=s*(1-s)
s(x)=1/(1+np.exp(-x))
import numpy as np
x=np.array([1,2,3])
print(x)
def npsigmoid(x):
return 1/(1+np.exp(-x))
print("x的sigmoid结果")
print(npsigmoid(x))
def sigmoid_derivative(x):
s=npsigmoid(x)
return s*(1-s)
print("x的梯度函数结果")
print("sigmoid_derivative(x)="+str(sigmoid_derivative(x)))
把3D数据改成1D,,重组数组
import numpy as np
def image2vector(image):
v=image.reshape(image.shape[0]*image.shape[1]*image.shape[2],1)
return v
#图片识别中,将图片分解为三个颜色通道的特征矩阵
#5,4,3中,3表示是三个颜色通道,5和4分别是行和列的像素个数,
#数据集,现用random.rand()生成,正常的话应该是有数据集的
image=np.random.rand(5,4,3)
print(image)
print("image2vector(image)="+str(image2vector(image)))
向量标准化
行标准化函数 np.linalg.norm(x, ord=None, axis=None, keepdims=False)
x的每一行应为单位长度(即长度为1)向量
范数是对向量(或者矩阵)的度量(0 范数、1范数、2范数........ P范数)
其中:
0 范数,表示向量中非零元素的个数。
1 范数,表示向量中各个元素绝对值之和。
2 范数,表示向量中各个元素平方和 的 1/2 次方,L2 范数又称 Euclidean 范数或者 Frobenius 范数。
p 范数,表示向量中各个元素绝对值 p 次方和 的 1/p 次方。
用法:np.linalg.norm(x, ord=None, axis=None, keepdims=False)
参数介绍:
x表示要度量的向量
ord:
ord=None,表示求整体的矩阵元素平方和,再开根号
ord=1,表示求列和的最大值
ord=2,|λE-ATA|=0,求特征值,然后求最大特征值的算术平方根
ord为无穷大,表示求行和的最大值
axis=0 表示按列向量来进行处理,求多个列向量的范数;
axis =1 表示按行向量来进行处理,求多个行向量的范数
keepdims表示是否保持矩阵的二位特性,True表示保持
"""
def normalizeRows(x):#求范数
x_norm=np.linalg.norm(x,axis=1,keepdims=True)
x=x/x_norm#广播效应
print(x.shape)
print(x_norm.shape)
return x
import numpy as np
x=np.array([[1,2,3],[4,5,6]])
print("x向量:"+str(x))
print("x的标准向量:"+str(normalizeRows(x)))
softmax()
求每个元素所占比例(在该元素所在的行中)
#softmax函数
import numpy as np
def softmax(x):
x_exp=np.exp(x)#对每个x中的元素求e^x
x_sum=np.sum(x_exp,axis=1,keepdims=True)#求每行矩阵/向量的和
return x_exp/x_sum
x=np.array([[1,1,1],[1,2,3]])
print("x向量:"+str(x))
print("x向量的softmax函数:"+str(softmax(x)))