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

文章目录

  • 用矩阵运算仿真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)+by=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)+by=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))#等价于三次seprint('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.568721060.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.007878420.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) + bif activation is None:outputs = XWbelse: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) + bif activation is None:outputs = XWbelse: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.hqwc.cn/news/472560.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定时器外部时钟

一、相较于内部时钟中断改动: 1.Timer.c RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_…

Day-01-02

项目框架搭建 1. 创建父工程 父工程:xuecheng-plus-parent 父工程中没有代码,不用去依赖其它的包,它的作用是限定其它子工程依赖包的版本号,在dependencyManagement 中去编辑即可。 在父工程中只需保留pom.xml文件以及自动生成…

AI实景无人直播 矩阵系统

矩阵系统:重塑未来的组织与沟通在不断变化的世界中,我们需要的不仅是适应变化的能力,更需要预见未来的视角。矩阵系统,正是一个能够助力我们应对复杂环境、实现高效组织和沟通的工具。一、矩阵系统的核心价值矩阵系统,…

【JVM篇】ThreadLocal中为什么要使用弱引用

文章目录 🍔ThreadLocal中为什么要使用弱引用⭐总结 🍔ThreadLocal中为什么要使用弱引用 ThreadLocal可以在线程中存放线程的本地变量,保证数据的线程安全 ThreadLocal是这样子保存对象的: 在每个线程中,存放了一个…

Python一级考试笔记

Python一级考试笔记【源源老师】 前置知识:(了解即可) Python常见的几种编程环境:IDLE(自带)、Visual Studio Code、Jupyter、pyCharm; python版本:python3 和 python2(…

SSM框架,spring-aop的学习

代理模式 二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来…

【开源】基于JAVA+Vue+SpringBoot的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

如何解决缓存和数据库的数据不一致问题

数据不一致问题是操作数据库和操作缓存值的过程中,其中一个操作失败的情况。实际上,即使这两个操作第一次执行时都没有失败,当有大量并发请求时,应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步&#xff0…

基于requests框架实现接口自动化测试项目实战

requests库是一个常用的用于http请求的模块,它使用python语言编写,在当下python系列的接口自动化中应用广泛,本文将带领大家深入学习这个库,Python环境的安装就不在这里赘述了,我们直接开干。 01、requests的安装 wi…

信息安全技术基础知识

一、考点分布 信息安全基础(※※)信息加密解密技术(※※※)密钥管理技术(※※)访问控制及数字签名技术(※※※)信息安全的保障体系 二、信息安全基础 信息安全包括5个基本要素&#…

Python三级考试笔记

Python三级考试笔记【源源老师】 三级标准 一、 理解编码、数制的基本概念,并且会应用。 1. 能够进行二进制、十进制以及十六进制之间的转换; 2. 理解Python中的数制转换函数。 二、 掌握一维数据的表示和读写方法,能够编写程序处理一维数据…

蓝桥杯电子类单片机提升三——NE555

目录 单片机资源数据包_2023 一、NE555和定时器工作模式 1.NE555的介绍 2.定时器的计数模式 二、NE555频率读取代码的实现 1.定时器0初始化 2.通过读取TH0和TL0来读取频率 3.通过中断读取频率 三、完整代码演示 通过读取TH0和TL0来读取频率 main.c 通过中断读取频…