1 初始化定义
import numpy as np
N, data_in, hidden, data_out = 64, 100, 100, 100
epochs = 1000
2 初始化变量
x = np.random.randn(N, data_in)
y_pred = np.random.randn(N, data_out)
w1 = np.random.randn(data_in, hidden)
w2 = np.random.randn(hidden, data_out)
3 手动神经网络
import numpy as np
N, data_in, hidden, data_out = 16, 1000, 100, 10
epochs = 1000
x = np.random.randn(N, data_in)
y_pred = np.random.randn(N, data_out)
w1 = np.random.randn(data_in, hidden)
w2 = np.random.randn(hidden, data_out)
learning_rate = 1e-6
for i in range(epochs):
h = x.dot(w1)
a = np.maximum(0, h)
y = a.dot(w2)
loss = np.square(y - y_pred).sum()
if i % 10 == 0:
print(loss)
grad_y = 2 * (y - y_pred)
grad_w2 = a.T.dot(grad_y)
grad_a = grad_y.dot(w2.T)
grad_h = grad_a.copy()
grad_h[grad_h<0] = 0
grad_w1 = x.T.dot(grad_h)
w1 -= learning_rate * grad_w1
w2 -= learning_rate * grad_w2