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對相應參數求導計算得到的。