栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2*2*2简单神经网络的实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2*2*2简单神经网络的实现

对chengchaowei—反向传播-通俗易懂进行实现
import numpy
def sigmoid(Z):
    A = 1 / (1 + numpy.exp(-Z))
    return A
def sigmoid_backward(A):
    dZ = A * (1 - A)
    return dZ
def forward(W, A, b):
    Z = numpy.dot(W, A) + b
    A = sigmoid(Z)
    return A
# 形参通过加上'_'来避免与实参名称发生冲突
def cost_compute(output_, Y_):
    cost_ = numpy.square(output_ - Y_) / 2
    print(f'cost = {cost}')
    return cost_
def backward_out(W, A, output_, Y_, learningRate_):
    dZ = (output_ - Y_) * output_ * (1 - output_)
    dw = numpy.dot(dZ, A.T)
    W -= learningRate_ * dw
    return W, dZ
def backward_hide(W_prev, W_current, dZ_, A_current, X, learningRate_):
    # W:(2, 2), dZ_:(2, 1), A * (1 - A):(2, 1) = (2, 1)
    dZ = dZ_ * W_prev * A_current * (1 - A_current)
    dZ = numpy.sum(dZ, axis = 1, keepdims = True)
    dw = numpy.dot(dZ, X.T)
    W_current -= learningRate_ * dw
    return W_current, dZ
# 对参数进行初始化
Y = numpy.empty([2, 1], dtype=float)
Y[0] = 0.01
Y[1] = 0.99
learningRate = 0.5
X = numpy.empty([2, 1], dtype=float)
X[0] = 0.05
X[1] = 0.1
W1 = numpy.empty([2, 2], dtype=float)
W2 = numpy.empty([2, 2], dtype=float)
W1[0][0] = 0.15
W1[0][1] = 0.2
W1[1][0] = 0.25
W1[1][1] = 0.3
W2[0][0] = 0.4
W2[0][1] = 0.45
W2[1][0] = 0.5
W2[1][1] = 0.55
b1 = numpy.empty([2, 1], dtype=float)
b2 = numpy.empty([2, 1], dtype=float)
b1[0] = 0.35
b1[1] = 0.35
b2[0] = 0.6
b2[1] = 0.6
for i in range(100000):
    A1 = forward(W1, X, b1)
    output = forward(W2, A1, b2)
    cost = cost_compute(output, Y)
    W2, dZ = backward_out(W2, A1, output, Y, learningRate)
    W1, dZ = backward_hide(W2, W1, dZ, A1, X, learningRate)

print("最终输出:",output)
print("目标输出:",Y)
print("偏差值为:",Y-output)
训练结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号