import time
a = np.random.rand(100000)
b = np.random.rand(100000)
#记录时间
tic = time.time()
# 进行矩阵运算,不使用for loop
c = np.dot(a,b)
#再次记录时间
toc = time.time()
print("need time:" + str(1000*(toc-tic)) +"ms")
shift + enter 运行
numpy的函数:
np.log np.abs np.maximum 并行化计算
这个网站列举了函数:https://www.cnblogs.com/TensorSense/p/6795995.html
我们来写一个简单的梯度下降logistic回归
#简单一点,我们设置一个只有两个特征x1,x2,并且只有两组的数据。
x = np.random.rand(2,2)
y = [1,0]
#初始化参数w和b
w = np.zeros(2)
b = 0
#计算linear总和
for i in range(10):
z = np.dot(w.T,x)+b
#sigmoid函数,a就是预测值
a = 1/(1+np.exp(-z))
print(a)#我们看一看它是如何变化的
#计算导数
dz = a-y
dw = np.dot(x,dz.T)/2
db = np.sum(dz)/2
#调整参数w,b,这里的学习率是0.2
w = w-0.2*dw
b = b-0.2*db
输出如下:
[0.5 0.5]
[0.50805306 0.50055199]
[0.51560339 0.50073525]
[0.522694 0.50058677]
[0.52936473 0.50014016]
[0.53565232 0.49942591]
[0.54159047 0.49847166]
[0.54721005 0.49730245]
[0.5525392 0.49594098]
[0.55760359 0.49440778]
可以感觉到变化趋势。
这里的导数都是loss function对相应参数求导计算得到的。
网友评论