numpy 極簡 神經網路

2021-08-20 10:36:31 字數 4203 閱讀 3697

# 導數

return x *(1

- x)

# s'(x) = s(x) (1 - s(x))

return1/

(1+ np.exp(

-x))

# 樣本

x = np.array([[

0,0,

1],[

0,1,

1],[

1,0,

1],[

1,1,

1],[

0,1,

0]])

# 5*3

y = np.array([[

0],[

1],[

1],[

1],[

0]])

# 5*1

# 初始化權重係數(隨機)

n =4

# 神經元個數

d = x.shape[1]

# dimensionality

w1 = np.random.random(

(d, n)

)# weight1

w2 = np.random.random(

(n,1))

# weight2

# 訓練

: self.n = n # 神經元個數

self.w1 =

none

# weight1

self.w2 =

none

# weight2

defsigmoid

(self, x, deriv=

false):

if deriv:

return x *(1

- x)

return1/

(1+ np.exp(

-x))

deffit

(self, x, y)

: y = y.reshape(-1

,1) d = x.shape[1]

w1 =

2* np.random.random(

(d, self.n))-

1 w2 =

2* np.random.random(

(self.n,1)

)-1for j in

range

(99999):

l1 = self.sigmoid(np.dot(x, w1)

) l2 = self.sigmoid(np.dot(l1, w2)

) l2_error = y - l2

l2_delta = l2_error * self.sigmoid(l2, deriv=

true

) l1_error = l2_delta.dot(w2.t)

l1_delta = l1_error * self.sigmoid(l1, deriv=

true

) w2 += l1.t.dot(l2_delta)

w1 += x.t.dot(l1_delta)

self.w1 = w1

self.w2 = w2

defpredict

(self, x)

: l1 = self.sigmoid(np.dot(x, self.w1)

) l2 = self.sigmoid(np.dot(l1, self.w2)

)return np.

round

(l2)

defscore

(self, x, y)

: y_predict = self.predict(x)

.reshape(-1

)return np.mean(y_predict == y)

defvisualization

(x1, x2, y1, y2, i)

: mp.subplot(2,

3, i)

mp.scatter(x1[:,

0], x1[:,

1], c=y1, alpha=

0.1)

mp.scatter(x2[:,

0], x2[:,

1], s=

9, c=y2)

mp.xticks(()

) mp.yticks(()

)# 建立樣本集

n_samples =

400samples =

[make_blobs(n_samples, centers=2)

, make_moons(n_samples, noise=

0.05),

make_circles(n_samples, noise=

.1, factor=.3)

]for i in

range(3

):# 樣本

x, y = samples[i]

x_train, x_test, y_train, y_test = train_test_split(x, y)

visualization(x_train, x_test, y_train, y_test, i +1)

# 神經網路

如圖示,簡單的神經網路可以完成分類任務,但分類效果一般(尤其是線性不可分的資料)

對此可引入relu,詳情猛戳python手寫非線性神經網路

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...

神經網路 卷積神經網路

1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...

神經網路簡介 多層神經網路

如上圖所示,該神經網路有三層。我們標記第一層 也就是輸入層 為a 1 第一層與第二層連線權重為w 1 然後第一層輸入與第一層權重的線性和為z 1 第一層神經元個數為n 1 並依次標記剩餘網路層。可以看出,存在 z l j i 1 n l a l i w l i,j a l w l j a l 1 f...