DL:LinearNN(numpy自定义的) solve XOR problem

简介: DL:LinearNN(numpy自定义的) solve XOR problem

输出结果

image.png




核心代码


#BP solve XOR Problem

import numpy as np

#输入数据,第一列的数字1表示偏置

X = np.array ([[1, 0, 0],

              [1, 0, 1],

              [1, 1, 0],

              [1, 1, 1]])

#标签

Y = np.array ([[0, 1, 1, 0]]) #两个中括号代表二维。分别对应00、01、10、11

#权值初始化,3行4列,取值范围[-1,1]

V = np.random.randn(3,4)*2-1

W = np.random.randn(4,1)*2-1

print (V)

print (W)

#设置学习率

lr = 0.11

           

def update():  #更新权值的函数

   global X,Y,W,V,lr   #当自定义的函数需要调用外部的参数时,需要利用global进行声明为全局变量

   L1=sigmoid(np.dot(X,V))  #隐藏层输出4*4

   L2=sigmoid(np.dot(L1,W)) #输出层输出4*1

   L2_delta=(Y.T-L2)*dsigmoid(L2)   #Y.T就是Y的转置

   L1_delta=L2_delta.dot(W.T)*dsigmoid(L1)

 

   W_C=lr*L1.T.dot(L2_delta)

   V_C=lr*X.T.dot(L1_delta)

   W=W+W_C

   V=V+V_C

for i in range(20000):

   update() #更新权值

   if i%500==0:

       L1=sigmoid(np.dot(X,V))  #隐藏层输出4*4

       L2=sigmoid(np.dot(L1,W)) #输出层输出4*1

       print("error:",np.mean(np.abs(Y.T-L2)))

     

L1=sigmoid(np.dot(X,V))  #隐藏层输出4*4

L2=sigmoid(np.dot(L1,W)) #输出层输出4*1

print(L2)

def judge(x):

   if x>=0.5:

       return 1

   else:

       return 0

for i in map(judge,L2):

   print(i)


LinearNN使用案例


1、LinearNN简单案例

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTMxMzQ3NS8yMDE4MDYvMTMxMzQ3NS0yMDE4MDYyNTE1NDcwNTg3Mi01NDA3MDQ0NzEuZ2lm

2、LinearNN solve  XOR problem

当lr=0.3时,相对比较大,每一个步长比较大,所以会在坑底部(最小值)两端进行跳动,然后训练到一定轮数,再改lr=0.03即可看到更好的情况。

image.png

image.png





相关文章
|
2月前
|
存储 机器学习/深度学习 数据处理
NumPy:从初识到实战,探索Python科学计算的无限可能
NumPy:从初识到实战,探索Python科学计算的无限可能
45 0
|
2月前
|
机器学习/深度学习 存储 算法
Python中的NumPy库:数值计算与科学计算的基石
【2月更文挑战第29天】NumPy是Python科学计算的核心库,专注于高效处理大型多维数组和矩阵。其核心是ndarray对象,提供快速数组操作和数学运算,支持线性代数、随机数生成等功能。NumPy广泛应用于数据处理、科学计算和机器学习,简化了矩阵运算、统计分析和算法实现,是数据科学和AI领域的重要工具。
|
2月前
|
存储 索引 Python
请解释Python中的NumPy库以及它的主要用途。
【2月更文挑战第27天】【2月更文挑战第97篇】请解释Python中的NumPy库以及它的主要用途。
|
2月前
|
程序员 开发工具 索引
图解Python numpy基本操作
图解Python numpy基本操作
|
18天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
14天前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
35 5
|
14天前
|
Python
NumPy 是 Python 的一个强大的科学计算库,它允许你创建各种类型的数组
【6月更文挑战第18天】**NumPy**是Python的科学计算库,用于创建和操作多维数组。常用数组生成方法包括:`np.array()`从列表转换为数组;`np.zeros()`生成全零矩阵;`np.ones()`创建全一矩阵;`np.linspace()`产生等差序列;`np.arange()`创建等差数列;以及`np.eye()`生成对角线为1的二维数组。更多方法可查阅NumPy官方文档。
26 2
|
2月前
|
存储 索引 Python
python学习——NumPy数值计算基础
NumPy基础知识概览:涉及nan(非数字)和inf(无穷)的概念,nan在文件读取或不适当计算时出现,inf在除0操作中出现。数组操作有深拷贝(a=b.copy())、浅拷贝(a=b[:])和引用(a=b)。创建数组方式多样,如`np.array()`、`np.arange()`等。数据类型转换如`np.float64()`、`np.int8()`。随机数生成包含均匀分布、正态分布等。数组索引和切片支持多维操作。改变数组形状用`reshape()`,展平用`ravel()`和`flatten()`。矩阵运算包括加减乘、转置、逆矩阵等。
43 2
python学习——NumPy数值计算基础
|
28天前
|
数据挖掘 数据处理 C语言
18. Python 数据处理之 Numpy
18. Python 数据处理之 Numpy
17 2
|
18天前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)