全连接神经网络

from functools import reduce
import numpy as np
import random


class ShenJing(object):


    def __init__(self):
        self.w = np.array([[random.random(), random.random(), random.random()], [random.random(), random.random(), random.random()], [random.random(), random.random(), random.random()], [random.random(), random.random(), random.random()]])
        self.x = np.array([random.random(), random.random(), random.random()])
        self.v = np.array([[random.random(), random.random(), random.random(), random.random()], [random.random(), random.random(), random.random(), random.random()]])
        self.y = np.array([random.random(), random.random()])
        self.nea = np.array([random.random(), random.random(), random.random(), random.random()])
        self.ney = np.array([random.random(), random.random()])
        self.ev = np.array([[random.random(), random.random(), random.random(), random.random()], [random.random(), random.random(), random.random(), random.random()]])
        self.ew = np.array([[random.random(), random.random(), random.random()], [random.random(), random.random(), random.random()], [random.random(), random.random(), random.random()], [random.random(), random.random(), random.random()]])
        self.a = np.array([random.random(), random.random(), random.random(), random.random()])
        self.t = np.array([0.8, 0.8])


    @staticmethod
    def dot(x, y):
        return reduce(lambda a, b: a + b , ShenJing.element_multiply(x, y), 0.0)

    @staticmethod
    def element_multiply(x, y):
        return list(map(lambda x_y: x_y[0] * x_y[1], zip(x, y)))

    def sum1(self, z):
        # self.nea[z] = `ShenJing.dot(self.x, self.w[z - 1])
        self.nea[z]=self.dot(self.x,self.w[z-1])
        return self.nea


def f(x):
    return 1. / (1 + np.exp(-x))


s = ShenJing()
print("原w",s.w)
print("原v",s.v)
print("原y",s.y)
print("t",s.t)
eps = 1e-4


for abc in range(0,20):
    for i in range(0, 2):
        for j in range(0, 4):
            for z in range(0, 1):
                s.ney[i] = s.dot(s.a, s.v[i])
                s.y[i] = f(s.ney[i])
                #print(s.y[i], s.ney[i])
                s.ev[i, j] = 2 * (s.a[j]) * (f(s.ney[i]) * (1 - f(s.ney[i])) * s.y[i] - s.t[i])
                s.v[i, j] = s.v[i, j] - 0.01 * s.ev[i, j]
                # print(s.ev, i, j, s.a,s.y,s.ney)

    # print(3333333333333333333333333333333333333333333333333333333333333333333333333333333333333)
    for z in range(0, 1):
        for i in range(0, 4):
            for j in range(0, 3):
                s.nea[i] = s.dot(s.x, s.w[i])
                s.a[i] = f(s.nea[i])
                #print(s.a[i], s.nea[i])
                s.ew[i, j] = 2 * (s.y[1] - s.t[1]) * (f(s.ney[1]) * (1 - f(s.ney[1]))) * s.v[1, i] * (f(s.nea[i]) * (1 - f(s.nea[i]))) * s.x[j] + 2 * (s.y[0] - s.t[0]) * (f(s.ney[0]) * (1 - f(s.ney[0]))) *s.v[0, i] * (f(s.nea[i]) * (1 - f(s.nea[i])))  * s.x[j]
                s.w[i,j] = s.w[i, j] - 0.01 * s.ew[i,j]
                #print(s.ew, i, j,s.y[1],s.t[1],s.nea[i])
                # print("a=",s.nea,s.a)


w = s.w
v = s.v
if __name__ == '__main__':
    print("w",w)
    print("v",v)
    print("y",s.y)

运行结果


原w [[0.39792296 0.03755962 0.78967184]
 [0.03167502 0.21148508 0.04436276]
 [0.09929411 0.16647298 0.13450978]
 [0.82836028 0.47726802 0.8672888 ]]


原v [[0.56515608 0.4931406  0.26113239 0.34398535]
 [0.08638857 0.49891787 0.40757679 0.73608298]]


原y [0.07366719 0.11561101]


t [0.8 0.8]


w [[0.39811859 0.03758604 0.7898546 ]
 [0.03196809 0.21152465 0.04463654]
 [0.0994855  0.16649882 0.13468858]
 [0.82857845 0.47729748 0.8674926 ]]


v [[0.74240857 0.63216193 0.40306433 0.54158012]
 [0.26427446 0.63842448 0.55001745 0.9343937 ]]


y [0.81103116 0.8192161 ]
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值