我的深度学习入门代码整理

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)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值