基礎(chǔ)知識(shí)代碼:
import numpyas np
import matplotlib.pyplotas plt
感知機(jī),與門(mén)(0.5,0.5,0.7)
def AND(x1, x2):
w1, w2, delta =0.5, 0.5, 0.7
? ? temp = x1 * w1 + x2 * w2
print(temp)
if temp? > delta:
return 1
? ? elif 0.5 * w1 +0.5*w2 < delta:
return 0
print(AND(1, 0), AND(0, 0), AND(1, 1), AND(0, 0))
numpy 數(shù)組實(shí)現(xiàn)與門(mén)
def AND(x1, x2):
delta = -0.7
? ? x = np.array([x1, x2])
w = np.array([0.5, 0.5])
temp = np.sum(x*w) + delta
if temp >0:
return 1
? ? elif temp <0:
return 0
def OR(x1, x2):
delta = -0.2
? ? x = np.array([x1, x2])
w = np.array([0.5, 0.5])
temp = np.sum(x*w) + delta
if temp >0:
return 1
? ? elif temp <0:
return 0
print(AND(1, 0), AND(0, 0), AND(1, 1), AND(0, 0))
#與非門(mén)
def NAND(x1, x2):
delta =0.2
? ? x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
temp = np.sum(x*w) + delta
if temp >0:
return 1
? ? elif temp <0:
return 0
#異或門(mén)屏镊,通過(guò)與非門(mén)依疼、與門(mén)和或門(mén)組合完成非線(xiàn)性的表示
def XOR(y1, y2):
a = OR(y1, y2)
b = NAND(y1, y2)
return AND(a, b)
print(XOR(1, 1))
階越函數(shù)
def step_function(x):
return np.array(x >0, dtype=np.int)
x = np.arange(-9, 9, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()
#sigmoid函數(shù),支持輸入?yún)?shù)為numpy數(shù)組
def sigmoid(x):
return 1 / (1 + np.exp(-x))
#print(sigmoid(np.array([-1, 2, 1, 2, 3, 4])))
x = np.arange(-9, 9, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()
ReLU函數(shù),最近使用較多
def relu(x):
return np.maximum(0, x)
numpy的多維數(shù)組使用
A = np.array([[1, 2], [3, 4]])
print(np.ndim(A), A.shape)#ndim數(shù)組的維數(shù)而芥,A.shape的結(jié)果是一個(gè)數(shù)組(tuple)
B = np.array([[5, 6], [7, 8]])
C = np.array([5, 6])
print(np.ndim(C), C.shape)
D = np.dot(A, C)
print(D)
神經(jīng)網(wǎng)絡(luò)的內(nèi)積,np一次性計(jì)算律罢,不需要使用for循環(huán)
X = np.array([1, 2])
print(X.shape)
W = np.array([[1, 3, 5], [2, 4, 6]])
print(W)
Y = np.dot(X, W)
print(Y)
信號(hào)傳遞
X = np.array([1, 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])
A = np.dot(X, W1) + B1
print(A)
print(sigmoid(A))
代碼實(shí)現(xiàn)小結(jié)
def init_network():
network = {}
network['W1'] = np.array([[0.1, 0.2, 0.3], [0.2, 0.4, 0.6]])
network['b1'] = np.array([0.1, 0.2, 0.3])
network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
network['b2'] = np.array([0.1, 0.2])
network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
network['b3'] = np.array([0.1, 0.2])
return network
def forward(network, x):
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
z1 = np.dot(x, W1) + b1
a1 = sigmoid(z1)
print(a1)
z2 = np.dot(a1, W2) + b2
a2 = sigmoid(z2)
print(a2)
z3 = np.dot(a2, W3) + b3
print(z3)
y = z3
return y
network = init_network()
x = np.array([1, 0.5])
y = forward(network, x)
print(y)
softmax 函數(shù),用于多個(gè)分類(lèi)
def softmax(a):
exp_a = np.exp(a)
print(exp_a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
a = np.array([0.3, 2.9, 4.0])
print(softmax(a))
#解決數(shù)據(jù)過(guò)大的溢出問(wèn)題,新的softmax函數(shù),輸出總和為1
def softmax(a):
c = np.max(a)
exp_a = np.exp(a-c)#溢出對(duì)策
? ? print(exp_a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
print(y)
return y
a = np.array([1010, 1000, 990])
print(softmax(a))
print(np.sum(softmax(a)))