动图很长
代码
import numpy as np
import matplotlib.pyplot as pyp
OUTPUT = 'output'
SUM = 'sum'
INPUT = 'input'
EXPECT = 'exp'
WEIGHT = 'weight'
LOST = 'lost'
START = 'start'
END = 'end'
B = 1.0
def af(v):
"""激励函数。
Args:
v (matrix): 自变量
Returns:
matrix: 函数值。
"""
return 1/(1+np.exp(-v))
def af_d(v):
"""激励函数的导数。
Args:
v (matrix): 自变量
Returns:
matrix: 函数值。
"""
d = af(v)
return np.multiply(d, 1.0-d)
def loss(y_hat, y):
"""交叉熵损失函数。
Args:
y_hat (matrix): 观测结果即神经网络输出层返回值
y (matrix): 模型输出
Returns:
float: 计算模型输出和观测结果间的差异。
"""
ret = []
row_count, col_count = y_hat.shape
for row_index in range(row_count):
y_hat_row_t = y_hat[row_index, ].T
left = np.dot(-y, np.log(y_hat_row_t))
right = np.dot((np.array([[1]]) - y), np.log(1 - y_hat_row_t))
res = np.sum(left