用numpy實現簡單的3層神經網路

2021-10-02 15:07:07 字數 1757 閱讀 2947

import numpy as np

#啟用函式

def sigmoid(x):

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

#輸出層時使用的『啟用函式』

def outputtype(x):

return x

#softmax函式

def softmax(a):

c = np.max(a)

exp_a = np.exp(a-c) #防止計算溢位,所以同時減去輸入訊號中的最大值,

sum_exp_a = np.sum(exp_a)

y = exp_a / sum_exp_a

return y

#輸入層到第一層

x = np.array([1.0, 0.5]) #輸入的資料

w1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) #第一層的權重

b1 = np.array([0.1, 0.2, 0.3]) #第一層的偏置

a1 = np.dot(x,w1)+b1 # np.dot矩陣的乘積運算

z1 = sigmoid(a1) #j啟用函式

print(『a1:』,a1)

print(『z1:』,z1)

#第一層到第二層

w2 = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])

b2 = np.array([0.1, 0.2])

a2 = np.dot(z1,w2)+b2

z2 = sigmoid(a2)

print(np.dot(x,w1))

print(『a2:』,a2)

print(『z2:』,z2)

#第二層到輸出層

w3 = np.array([[0.1, 0.3],[0.2, 0.4]])

b3 = np.array([0.1,0.2])

a3 = np.dot(z2,w3)+b3

y = outputtype(a3) #輸出層時使用的『啟用函式』

y = np.argmax(a3) #返回numpy列表中最大值的下標

print(『a3:』,a3)

print(a3.max())

print(y)

輸出層所使用的啟用函式,要根據求解問題的性質決定。一般而言,
1、回歸問題可以使用恒等函式作為啟用函式(如上述自定義的outputtype函式)2、二元分類問題可以使用sigmoid函式作為啟用函式def sigmoid(x):

3、多元分類問題可以使用softmax函式作為啟用函式。

def softmax(a):

c = np.max(a) #防止計算溢位,所以同時減去輸入訊號中的最大值,

#同時加上或減去乙個常數並不會影響結果。

Numpy實現兩層的神經網路

numpy ndarray是乙個普通的n維array。它不知道任何關於深度學習或者梯度 gradient 的知識,也不知道計算圖 computation graph 只是一種用來計算數 算的資料結構。一 神經網路結構圖 二 神經網路的構建 1 乙個輸入向量,乙個隱藏層,乙個全連線relu神經網路,沒...

使用numpy實現乙個簡單的2層神經網路

import numpy as np def main 2層神經網路,64個輸入1000維,1個隱藏層100維,輸出10維 n,d in,h,d out 64,1000,100,10 隨機初始化樣本 x np.random.randn n,d in y np.random.randn n,d out...

python實現簡單的3層神經網路識別手寫數字

import numpy as np import scipy.special import scipy.misc class neural network object 類的初始化的方法 def init self,inputnodes,hidenodes,outnodes,learnrate 輸...