用tensorflow模仿BP神经网络执行过程

news2024/11/24 6:51:24

文章目录

  • 用矩阵运算仿真BP神经网络
          • y= relu ( (X․W ) + b )
          • y= sigmoid ( (X․W ) + b )
  • 以随机数产生Weight(W)与bais(b)
          • placeholder
  • 建立layer函数
  • 改进layer函数,使其能返回w和b

github地址https://github.com/fz861062923/TensorFlow

用矩阵运算仿真BP神经网络

import tensorflow as tf
import numpy as np
C:\Users\admin\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
y= relu ( (X․W ) + b )
X = tf.Variable([[0.4,0.2,0.4]])

W = tf.Variable([[-0.5,-0.2 ],
                 [-0.3, 0.4 ],
                 [-0.5, 0.2 ]])
                         
b = tf.Variable([[0.1,0.2]])
    
XWb =tf.matmul(X,W)+b

y=tf.nn.relu(tf.matmul(X,W)+b)#引用ReLU激活函数

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('XWb:')    
    print(sess.run(XWb ))    
    print('y:')    
    print(sess.run(y ))
XWb:
[[-0.35999998  0.28      ]]
y:
[[0.   0.28]]
y= sigmoid ( (X․W ) + b )
X = tf.Variable([[0.4,0.2,0.4]])

W = tf.Variable([[-0.5,-0.2 ],
                 [-0.3, 0.4 ],
                 [-0.5, 0.2 ]])

b = tf.Variable([[0.1,0.2]])

XWb=tf.matmul(X,W)+b

y=tf.nn.sigmoid(tf.matmul(X,W)+b)

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('XWb:')    
    print(sess.run(XWb))    
    print('y:')    
    print(sess.run(y ))
XWb:
[[-0.35999998  0.28      ]]
y:
[[0.41095957 0.5695462 ]]

以随机数产生Weight(W)与bais(b)

W = tf.Variable(tf.random_normal([3, 2]))
b = tf.Variable(tf.random_normal([1, 2]))
X = tf.Variable([[0.4,0.2,0.4]])
y=tf.nn.relu(tf.matmul(X,W)+b)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('b:')
    print(sess.run(b ))    
    print('W:')
    print(sess.run(W ))
    print('y:')
    print(sess.run(y ))    
b:
[[-0.1278446   0.15272076]]
W:
[[ 0.09724175 -0.70408934]
 [ 1.4106061  -0.39071304]
 [-0.74939483 -0.36333686]]
y:
[[0. 0.]]
W = tf.Variable(tf.random_normal([3, 2]))
b = tf.Variable(tf.random_normal([1, 2]))
X = tf.Variable([[0.4,0.2,0.4]])
y=tf.nn.relu(tf.matmul(X,W)+b)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    (_b,_W,_y)=sess.run((b,W,y))#等价于三次se
    print('b:')
    print(_b)
    print('W:')
    print(_W)
    print('y:')
    print(_y)   
b:
[[-0.5877543  2.1299696]]
W:
[[ 1.0390263   0.5285081 ]
 [-0.92886233 -0.5300881 ]
 [ 0.4078475   0.684533  ]]
y:
[[0.        2.5091684]]
placeholder
W = tf.Variable(tf.random_normal([3, 2]))
b = tf.Variable(tf.random_normal([1, 2]))
X = tf.placeholder("float", [None,3])
y=tf.nn.relu(tf.matmul(X,W)+b)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X_array = np.array([[0.4,0.2,0.4]])
    (_b,_W,_X,_y)=sess.run((b,W,X,y),feed_dict={X:X_array})
    print('b:')
    print(_b)    
    print('W:')
    print(_W)
    print('X:')
    print(_X)
    print('y:')
    print(_y)
b:
[[-1.00988698 -0.90781182]]
W:
[[ 0.77819425  0.74534345]
 [ 0.62385881 -0.30757746]
 [ 0.84864932  1.10149086]]
X:
[[ 0.40000001  0.2         0.40000001]]
y:
[[ 0.  0.]]
_y.shape
(1, 2)
ts_norm = tf.random_normal([1000])
with tf.Session() as session:
    norm_data=ts_norm.eval()
print(len(norm_data))
print(norm_data[:30])
1000
[-0.62594283 -1.53080451  0.20968008  0.48862299 -0.98033726  1.56872106
  0.34392843 -0.32248533 -1.38410163 -0.8074798   0.06213726  0.41173849
 -0.79638833  0.07239912 -1.5461148  -1.4486984   0.5450505   0.37378398
 -0.23069905 -0.26489291 -1.30195487 -0.18677172  0.50207907 -1.00787842
  0.56418502  0.51869804 -1.74017227 -2.36948991  0.98451078  0.93969965]
import matplotlib.pyplot as plt
plt.hist(norm_data)
plt.show()    

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

W = tf.Variable(tf.random_normal([3, 2]))
b = tf.Variable(tf.random_normal([1, 2]))
X = tf.placeholder("float", [None,3])
y=tf.nn.sigmoid(tf.matmul(X,W)+b)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X_array = np.array([[0.4,0.2 ,0.4],
                        [0.3,0.4 ,0.5],
                        [0.3,-0.4,0.5]])    
    (_b,_W,_X,_y)=sess.run((b,W,X,y),feed_dict={X:X_array})
    print('b:')
    print(_b)    
    print('W:')
    print(_W)
    print('X:')
    print(_X)
    print('y:')
    print(_y)
b:
[[ 1.3742691 -0.6307982]]
W:
[[-0.25237647  0.28716296]
 [-0.24805067 -0.40259644]
 [ 1.6787063  -1.9441847 ]]
X:
[[ 0.4  0.2  0.4]
 [ 0.3  0.4  0.5]
 [ 0.3 -0.4  0.5]]
y:
[[0.86934626 0.20195402]
 [0.88479966 0.15738963]
 [0.90353453 0.20493953]]

建立layer函数

功能是建立两层神经网络

def layer(output_dim,input_dim,inputs, activation=None):
    W = tf.Variable(tf.random_normal([input_dim, output_dim]))
    b = tf.Variable(tf.random_normal([1, output_dim]))
    XWb = tf.matmul(inputs, W) + b
    if activation is None:
        outputs = XWb
    else:
        outputs = activation(XWb)
    return outputs
X = tf.placeholder("float", [None,4])

y=layer(output_dim=3,input_dim=4,inputs=X,
        activation=tf.nn.relu)

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X_array = np.array([[0.4,0.2 ,0.4,0.1],
                        [0.3,0.4 ,0.5,0.3],
                        [0.3,-0.4,0.5,0.2]])    
    (_X,_y)=sess.run((X,y),feed_dict={X:X_array})
    print('X:')
    print(_X)
    print('y:')
    print(_y)    
X:
[[ 0.4  0.2  0.4  0.1]
 [ 0.3  0.4  0.5  0.3]
 [ 0.3 -0.4  0.5  0.2]]
y:
[[0.         0.79015875 1.5285197 ]
 [0.31821787 1.2630901  1.1021228 ]
 [0.48398763 0.33778787 1.7573613 ]]
X = tf.placeholder("float", [None,4])
h=layer(output_dim=3,input_dim=4,inputs=X,
        activation=tf.nn.relu)
y=layer(output_dim=2,input_dim=3,inputs=h)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X_array = np.array([[0.4,0.2 ,0.4,0.5]])    
    (layer_X,layer_h,layer_y)= \
            sess.run((X,h,y),feed_dict={X:X_array})
    print('input Layer X:')
    print(layer_X)
    print('hidden Layer h:')
    print(layer_h)
    print('output Layer y:')
    print(layer_y)
input Layer X:
[[0.4 0.2 0.4 0.5]]
hidden Layer h:
[[1.5489424  0.         0.63559824]]
output Layer y:
[[3.4448848  0.05538869]]

改进layer函数,使其能返回w和b

def layer_2(output_dim,input_dim,inputs, activation=None):
    W = tf.Variable(tf.random_normal([input_dim, output_dim]))
    b = tf.Variable(tf.random_normal([1, output_dim]))
    XWb = tf.matmul(inputs, W) + b
    if activation is None:
        outputs = XWb
    else:
        outputs = activation(XWb)
    return outputs,W,b
X = tf.placeholder("float", [None,4])
h,W1,b1=layer_debug(output_dim=3,input_dim=4,inputs=X,
                    activation=tf.nn.relu)
y,W2,b2=layer_debug(output_dim=2,input_dim=3,inputs=h)
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X_array = np.array([[0.4,0.2 ,0.4,0.5]])    
    (layer_X,layer_h,layer_y,W1,b1,W2,b2)= \
             sess.run((X,h,y,W1,b1,W2,b2),feed_dict={X:X_array})
    print('input Layer X:')
    print(layer_X)
    print('W1:')
    print(  W1)    
    print('b1:')
    print(  b1)    
    print('hidden Layer h:')
    print(layer_h)    
    print('W2:')
    print(  W2)    
    print('b2:')
    print(  b2)    
    print('output Layer y:')
    print(layer_y)
input Layer X:
[[0.4 0.2 0.4 0.5]]
W1:
[[-2.494698    0.10329538 -0.5353932 ]
 [-1.022263   -1.1610479  -3.0859344 ]
 [ 1.9652166   0.3464464   1.2346822 ]
 [-1.0058508  -0.81840676 -0.9512821 ]]
b1:
[[ 0.1718771   0.93178105 -1.4650283 ]]
hidden Layer h:
[[0.        0.4702648 0.       ]]
W2:
[[ 0.80631006  1.5261457 ]
 [ 0.24046504 -0.08329547]
 [ 0.2570049   0.40859744]]
b2:
[[-0.16517083  0.45186767]]
output Layer y:
[[-0.05208859  0.41269675]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1452003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于内存相关的梳理

1 关键字 总结 (lowmemory,anr in) 2 知识储备 虚拟机原理 垃圾回收算法 又包含标记 和清除两种算法 标记:程序计数器-已过时,可达性分析 具体可见 http://help.eclipse.org/luna/index.jsp?topic%2Forg.ec…

C#,二进制数的非0位数统计(Bits Count)的算法与源代码

计算一个十进制数的二进制表示有多少位1? 1 遍历法(递归或非递归) 使用循环按位统计1的个数。 2 哈希查表法 利用一个数组或哈希生成一张表,存储不同二进制编码对应的值为1的二进制位数,那么在使用时,只…

【Linux】进程的初步认识

进程的初步认识 基本概念描述进程task_struct-PCB的一种task_stuct内容分类 查看进程通过系统调用获取进程标识符 基本概念 要了解进程,首先我们要知道两点 我们可以同时启动多个程序,也就意味着我们可以将多个.exe文件加载到内存操作系统如何去管理这些…

Android Jetpack Compose 沉浸式状态栏的实现

目录 概述效果展示代码实现总结 概述 说到沉浸式状态栏,很多小伙伴可能不太熟悉,其实让Android的状态栏的颜色和APP的主题颜色相同,给人感觉状态栏和APP就是一体的。沉浸式的状态栏让页面看起来更舒服,实现沉浸式状态栏也很简单&…

紫微斗数双星组合:天机巨门在卯酉

文章目录 前言内容总结 前言 紫微斗数双星组合:天机巨门在卯酉 内容 紫微斗数双星组合:天机巨门在卯酉 性格分析 天机巨门在卯酉宫的人有天机星机敏的特质,及巨门星锲而不舍、追根究底的性格,记忆力及模仿力都很好&#xff0c…

【DDD】学习笔记-聚合设计原则

聚合设计原则 对比对象图和聚合,我们认为引入聚合的目的是控制对象之间的关系,这实则是引入聚合的技术原因。领域驱动设计引入聚合(Aggregate)来划分对象之间的边界,在边界内保证所有对象的一致性,并在对象…

【深度学习】Pytorch 系列教程(三):PyTorch数据结构:2、张量的数学运算(1):向量运算(加减乘除、数乘、内积、外积、范数、广播机制)

文章目录 一、前言二、实验环境三、PyTorch数据结构0、分类1、Tensor(张量)1. 维度(Dimensions)2. 数据类型(Data Types)3. GPU加速(GPU Acceleration) 2、张量的数学运算1. 向量运算…

CSS的background 背景图片自动适应元素大小,实现img的默认效果 background-size:100% 100%;

CSS的background 背景图片自动适应元素大小,实现img的默认效果 background-size:100% 100%; 关键是background-size:100% 100%; background-size:100% 100%; background-size:100% 100%; background-size:contain; 保持纵横比, 容器部分可能空白background-size:cover; 保…

紫微斗数双星组合:天机太阴在寅申

文章目录 前言内容总结 前言 紫微斗数双星组合:天机太阴在寅申 内容 紫微斗数双星组合:天机太阴在寅申 性格分析 天机星与太阴星同坐寅申二宫守命的男性,多浪漫,易与女性接近,温柔体贴,懂得女人的心理。…

Java与JavaScript同源不同性

Java是目前编程领域使用非常广泛的编程语言,相较于JavaScript,Java更被人们熟知。很多Java程序员想学门脚本语言,一看JavaScript和Java这么像,很有亲切感,那干脆就学它了,这也间接的帮助了JavaScript的发展…

持久化:Linux利用SUID、任务计划、vim进行权限维持

目录 利用Linux SUID进行权限维持 利用Linux计划任务进行权限维持 利用Vim创建后门 利用CVE-2019-12735进行权限维持 使用Vim运行Python后门程序 利用Linux SUID进行权限维持 在前面我们使用Linux的SUID权限进行了权限提升,然后SUID还可以用来进行持久化 利用…

docker (四)-docker网络

默认网络 docker会自动创建三个网络,bridge,host,none bridge桥接网络 如果不指定,新创建的容器默认将连接到bridge网络。 默认情况下,使用bridge网络,宿主机可以ping通容器ip,容器中也能ping通宿主机。 容器之间只…

[Android]Frida-hook环境配置

准备阶段 反编译工具:Jadx能够理解Java语言能编写小型的JavaScript代码连接工具:adb设备:Root的安卓机器,或者模拟器 Frida(https://frida.re/) 就像是你计算机或移动设备的妙妙工具。它帮助你查看其他程序或应用内部发生的事情&#xff0…

云计算基础-网络虚拟化

虚拟交换机 什么是虚拟交换机 虚拟交换机是一种运行在虚拟化环境中的网络设备,其运行在宿主机的内存中,通过软件方式在宿主机内部实现了部分物理交换机的功能,如 VLAN 划分、流量控制、QoS 支持和安全功能等网络管理特性 虚拟交换机在云平…

java8-用流收集数据-6

本章内容口用co1lectors类创建和使用收集器 口将数据流归约为一个值 口汇总:归约的特殊情况 数据分组和分区口 口 开发自己的自定义收集器 我们在前一章中学到,流可以用类似于数据库的操作帮助你处理集合。你可以把Java8的流看作花哨又懒惰的数据集迭代器。它们…

SQL-Labs靶场“6-10”关通关教程

君衍. 一、第六关 基于GET的双引号报错注入1、源码分析2、floor报错注入3、updatexml报错注入 二、第七关 基于文件写入注入1、源码分析2、outfile注入过程 三、第八关 基于GET单引号布尔盲注1、源码分析2、布尔盲注(脚本)2、布尔盲注(手工&a…

多线程 --- 线程互斥

目录 1. 线程互斥 1.1. 相关背景概念 1.2. 互斥锁 1.2.1. 初始化互斥量 1.2.2. 销毁互斥量 1.2.3. 互斥量加锁 && 解锁 1.3. 互斥量 (锁) 的原理 1.3.2. 相关问题和解释 1.3.2. 锁的实现原理 1.3.3. 可重入 && 线程安全问题 1.3.4. 常见的线程不安全…

循序渐进-讲解Markdown进阶(Mermaid绘图)-附使用案例

Markdown 进阶操作 查看更多学习笔记:GitHub:LoveEmiliaForever Mermaid官网 由于CSDN对某些Mermaid或Markdown语法不支持,因此我的某些效果展示使用图片进行 下面的笔记内容全部是我根据Mermaid官方文档学习的,因为是初学者所以…

OpenAI Sora是世界模型?

初见Sora,我被OpenAI的野心震撼了。 他们不仅想教会AI理解视频,还要让它模拟整个物理世界!这简直是通用人工智能的一大飞跃。 但当我深入了解后,我发现Sora比我想象的更复杂、更强大。 Sora不是简单的创意工具,而是…

十五、Object 类

文章目录 Object 类6.1 public Object()6.2 toString方法6.3 hashCode和equals(Object)6.4 getClass方法6.5 clone方法6.6 finalize方法 Object 类 本文为书籍《Java编程的逻辑》1和《剑指Java:核心原理与应用实践》2阅读笔记 java.lang.Object类是类层次结构的根…