课堂笔记:
课后作业:
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# sigmoid函数的导数
def sigmoid_derivative(x):
return x * (1 - x)
# 自定义训练所需要的数据的输入值x
training_inputs = np.array([[0, 0, 1],
[1, 1, 1],
[1, 0, 1],
[0, 1, 1]])
# 自定义训练所需要的数据的输出值y
training_outputs = np.array([[0, 1, 1, 0]]).T
# 定义一个随机种子
np.random.seed(1)
# 随机生成权重
weights = 2 * np.random.random((3, 1)) - 1
print('开始时随机产生的权重: ')
print(weights)
# 进行2w次迭代
for iteration in range(20000):
# 输入层即之前自定义训练所需要的数据的输入值x
input_layer = training_inputs
# 将输入层根据权重输入至sigmoid函数,即将输入层数据与权重进行点乘
outputs = sigmoid(np.dot(input_layer, weights))
# 误差计算
error = training_outputs - outputs
# 将输出值放入sigmoid的导数,并于误差值相乘,得到调整值
adjustments = error * sigmoid_derivative(outputs)
# 根据输入层数据与调整值点乘的结果更新权重
weights += np.dot(input_layer.T, adjustments)
print('训练后更新的权重: ')
print(weights)
print('训练后的结果为: ')
print(outputs)
结果:
开始时随机产生的权重:
[[-0.16595599]
[ 0.44064899]
[-0.99977125]]
训练后更新的权重:
[[10.38040701]
[-0.20641179]
[-4.98452047]]
训练后的结果为:
[[0.00679672]
[0.99445583]
[0.99548516]
[0.00553614]]