import numpy as np
import random
import sys
import math
alpha = 0.01
#sigmoid函数
def sigmoid(x):
return 1 / (1 + math.exp(-x))
#损失函数
def loss():
sigema1 = (y[0] - t[0]) ** 2
sigema2 = (y[1] - t[1]) ** 2
return sigema1 + sigema2
#t是预测值 (随机的)
t = [random.uniform(0,1),random.uniform(0,1)]
x1 = random.uniform(0,1)
x2 = random.uniform(0,1)
x3 = random.uniform(0,1)
#x是输入层的输入值
x = [x1,x2,x3]
#w1矩阵是输入层到隐藏层的每条权重的矩阵
#w2矩阵是隐藏层到输出层的每条权重的矩阵
w1 = np.array([[ random.uniform(0,1) for col in range(0,4)] for row in range(0,3)])
w2 = np.array([[ random.uniform(0,1) for col in range(0,2)] for row in range(0,4)])
#a矩阵是隐藏层的值
a = np.array([random.uniform(0,1),random.uniform(0,1),random.uniform(0,1),random.uniform(0,1)])
for i in range(0,4):
a[i] = sigmoid(np.sum(x * w1[:,i]))
#y矩阵是输出层的输出值
y = [random.uniform(0,1),random.uniform(0,1)]
#计算y矩阵
for i in range(0,2):
y[i] = sigmoid(np.sum(a * w2[:,i]))
#初始化delta矩阵 (delta矩阵的行列数与w矩阵相同)
delta1 = np.array([[ random.uniform(0,1) for col in range(0,4)] for row in range(0,3)])
delta2 = np.array([[ random.uniform(0,1) for col in range(0,2)] for row in range(0,4)])
#计算输入层到隐藏层的各个delta值
for i in range(0,3):
for j in range(0,4):
for k in range(0,2):
delta1[i][j] = a[j] * (1 - a[j]) * w1[i][j] * (loss() * 2 * (y[k] - t[k]) * w2[i][k])
#计算隐藏层到输出层的各个delta值
for i in range(0,4):
for j in range(0,2):
delta2[i][j] = 2 * (y[j] - t[j]) * y[j] * (1 - y[j]) * a[j]
#计算输入层到隐藏层的权重 (训练100次)
for _ in range(100):
for i in range(0,3):
for j in range(0,4):
w1[i][j] -= alpha * delta1[i][j]
#计算隐藏层到输出层的权重 (训练100次)
for _ in range(100):
for i in range(0,4):
for j in range(0,2):
w2[i][j] -= alpha * delta2[i][j]
#结果
print(w1)
print(w2)
数据全部随机 公式比较复杂 难以验证正确性



