最近在入門深度學習,看到全連接的時候,一時興起來模擬一下最小二乘的解法。
import numpy as np
import random
import matplotlib.pyplot as plt
#造數據,對y=3x+2直線上的點進行擾動
n = 100
x = np.zeros((n,2))
y = np.zeros((n,1))
for i in range(n) :
x[i,0] = random.randint(1,20)
x[i,1] = 1
if(i % 3 == 0) :
y[i] = 3*x[i,0] + 2* x[i,1] + 5
else :
y[i] = 3*x[i,0] + 2* x[i,1]
#生成隨機權重(k,b): y = kx + b
np.random.seed(1)
w = np.random.rand(2,1)
#前向傳播與後向傳播,注意dw = x.T * l1_err,並且學習率很重要
for j in range(100000):
l1 = np.dot(x,w)
l1_err = l1 - y
w -= 0.0001 * x.T.dot(l1_err)
#畫出擬合直線
print("final w:\n",w)
k = w[0][0]
b = w[1][0]
plt.plot([0,20],[b,20*k+b], color='r')
plt.scatter(x[:,0], y, marker='.', c='g')
plt.show()
效果如下所示,綠色爲散點,紅色爲擬合的直線,效果還不錯!