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 輸...