DL(四)用python实现简单的神经网络

本文介绍了一个简单的三层神经网络实现过程,使用Python和NumPy库。通过定义sigmoid激活函数及其导数,初始化网络权重,并通过迭代训练调整权重以最小化预测误差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现只有三层的神经网络

import numpy as np

#定义sigmoid函数
def sigmoid(x,deriv = False):
    if (deriv == True):
        return x*(1-x)
    return 1/(1+np.exp(-x))

#输入
x = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1],[0,0,1]])
#print(x.shape)

#输出标签
y = np.array([[0],[1],[1],[0],[0]])
#print(y.shape)

np.random.seed(1)

#初始化权重参数,归一化到(-1,1)之间
w0 = 2*np.random.random((3,4))-1 #三行四列矩阵,三的维度是固定的
w1 = 2*np.random.random((4,1))-1 #输出0或1,维度为1
#print(w0)

for j in range(60000):
    l0=x
    l1=sigmoid(np.dot(l0,w0))
    l2=sigmoid(np.dot(l1,w1))
    #用均方误差做损失函数
    l2_error = y-l2 
    #print(l2_error.shape)
    if j%5000 == 0:
        print ('Error'+str(np.mean(np.abs(l2_error))))
    #w1对l2的错误做了多大贡献
    #sigmoid(l2,deriv = True)为sigmoid导数值
    l2_delta = l2_error*sigmoid(l2,deriv = True)
    l1_error = l2_delta.dot(w1.T)
    l1_delta = l1_error*sigmoid(l1,deriv = True)
    #更新w0,w1
    w1 += l1.T.dot(l2_delta) 
    w0 += l0.T.dot(l1_delta)

下面是输出结果:

Error0.491873939736
Error0.0151236636586
Error0.00979428446397
Error0.00768391123459
Error0.00649307653844
Error0.00570862063183
Error0.00514415767838
Error0.00471401703819
Error0.0043727491817
Error0.00409377051499
Error0.00386038674497
Error0.00366152984108
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值