hhw9307 2017-10-19 04:07 采纳率: 0%
浏览 1286
已结题

【python】【神经网络】请教各位大牛用神经网络解决XOR的一些问题

大家好,我尝试自己写了一个神经网络来做XOR的例子,但是输出结果始终不如人意,不知问题出在哪里?望各位大牛解答!
先附上循环10次的输出结果:
[[ 0.63892076]
[ 0.67854515]
[ 0.6880628 ]
[ 0.71555396]]

以下是代码:

 # -*- coding: utf-8 -*-
"""
Created on Wed Oct 18 23:29:20 2017

@author: 32641
"""
import numpy as np

def sigmoid(x):
    result=1/(1+np.exp(-x))
    return result

    #此函数是为了计算梯度用
def matrix_X(X,Y):
    l1=[]
    for n in range(len(Y)):
        l=[]
        for x in X[n]:
            for y in Y[n]:
                l.append(x*y)
        l1.append(l)
    return np.array(l1)

#初始化
X=np.array([[0,0],[1,0],[0,1],[1,1]],dtype=np.float32)
Y=np.array([1,0,0,1],dtype=np.float32).reshape(4,1)
V=np.random.rand(2,2)
W=np.random.rand(2,1)
b1=np.tile(np.zeros((1,2)),(4,1))
b2=np.tile(np.zeros((1,1)),(1,1))
D=np.dot(X,V)+b1
O=np.dot(sigmoid(D),W)+b2
output=sigmoid(O)
error=np.sum(np.square(Y-output))

#backward
for n in range(10):
    #求导
    gradient_w=np.sum((Y-output)*sigmoid(O)*(1-sigmoid(O))*sigmoid(D),axis=0).reshape((2,1))
    gradient_b2=np.sum((Y-output)*sigmoid(O)*(1-sigmoid(O)),axis=0).reshape((1,1))
    gradient_v=np.sum(matrix_X(X,(Y-output)*sigmoid(O)*(1-sigmoid(O))*sigmoid(D)*(1-sigmoid(D))),axis=0).reshape((2,2))
    gradient_b1=np.sum((Y-output)*sigmoid(O)*(1-sigmoid(O))*sigmoid(D)*(1-sigmoid(D)),axis=0).reshape((1,2))
    η=0.01
    W=W+η*gradient_w
    b2=b2-η*np.tile(gradient_b2,(1,1))
    V=V-η*gradient_v
    b1=b1-η*np.tile(gradient_b1,(4,1))
    D=np.dot(X,V)+b1
    O=np.dot(sigmoid(D),W)+b2
    output=sigmoid(O)
    error=np.sum(np.square(Y-output))
    print(error)
print(output)
  • 写回答

1条回答 默认 最新

  • threenewbee 2017-10-19 11:05
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件