動手實現乙個簡單神經網路

2021-08-22 16:18:38 字數 1763 閱讀 4532

import numpy as np
//定義乙個啟用函式

defsigmoid

(x,deriv=false):

if (deriv == true):

return x*(1-x)

return

1/(1+np.exp(-x))

//構造樣本

x = np.array([

[1,0,1,0,1,1],

[1,1,1,0,1,1],

[1,0,1,0,0,1],

[1,0,0,0,0,1],

[1,1,1,1,1,1],

[0,0,1,0,1,0],

[0,0,1,1,1,1]

])

//構造標籤

y = np.array([

[1],

[0],

[0],

[1],

[1],

[1],

[0]])

//設定乙個種子

np.random.seed(1)

//隨機化初始權重值,高斯初始化,或者隨機0-1初始化

w0 = 2*np.random.random((6,5))

w1 = 2*np.random.random((5,7))

w2 = 2*np.random.random((7,1))

//構造網路,這裡迭代6000次

for i in range(60000):

# 前向傳播

l0 = x

l1 = sigmoid(l0.dot(w0))

l2 = sigmoid(l1.dot(w1))

l3 = sigmoid(l2.dot(w2))

#計算錯誤

l3_error = l3 - y

if(i%10000 == 0): #每10000次列印出來乙個error

print("error: "+np.str(np.mean(np.abs(l3_error))))

#進行反向傳播

l3_delta = l3_error * sigmoid(l3,deriv = true)

l2_error = l3_delta.dot(w2.t)

l2_delta = l2_error * sigmoid(l2,deriv = true)

l1_error = l2_delta.dot(w1.t)

l1_delta = l1_error * sigmoid(l1,deriv = true)

l0_error = l1_delta.dot(w0.t)

l0_delta = l0_error * sigmoid(l0,deriv = true)

#更新梯度

w2 -= l2.t

.dot(l3_delta)

w1 -= l1.t

.dot(l2_delta)

w0 -= l0.t

.dot(l1_delta)

print(w2)

print(w1)

print(w0)

結果:

實現乙個最簡單的神經網路

這次實現乙個最簡單的神經網路,這個神經網路能判斷輸入的是奇數還是偶數通常咱們寫程式 就要寫成這樣了 if inputnumber 2 else 但是神經網路不是這樣的 首先來想一下,嬰兒時怎麼學習的。嬰兒要學習乙個東西,比如漢語 嬰兒在剛出生的時候是不會任何和漢語相關的知識的 是嬰兒在後來逐漸的學習...

乙個神經網路

機器學習三要素 資料 演算法 算力 1 機器學習,就是在任務 t 上,隨經驗 e 的增加,效果 p 隨之增加。2 機器學習的過程是通過大量資料的輸入,生成乙個模型,再利用這個生成的 模型,實現對結果的 3 龐大的神經網路是基於神經元結構的,是輸入乘以權重,再求和,再過非線 性函式的過程。檔案讀操作 ...

pytroch 動手搭建第乙個神經網路

我是用的是pytorch框架,python3.6,開發工具pycharm 這裡自己造假資料,實現回歸模型 一 造資料 import torch import numpy as np import matplotlib.pyplot as plt from torch.nn.functional as...