我们构想有一个神经网络,输入为两个input,中间有一个hidden layer,这个hiddenlayer当中有三个神经元,最后有一个output。

图例如下:

在实现这个神经网络的前向传播之前,我们先补充一下重要的知识。

一.权重w以及input的初始化

我们初始化权重w的方法为随机生成这些权重,一般可以使用这些随机生成的数据正好在正态分布的曲线上,这也是最符合生成符合自然规律的随机数生成方法:

import tensorflow as tf
#一般情况下神经网络上的参数是w的数列,当然我们一般使用随机数来生成这些参数
w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1))
#其中stddev表示标准差,mean表示均值,【】表示随机生成正态分布的数值的shape

这样我们的权重就生成了,我们初始化input的方法有有以下几种,伪代码如下:

除了这种方式,我们还可以使用
tf.constant([1,2,3]),来生成指定数值
tf.zeros([2,3],int32),用来生成全零
tf.ones([2,3],int32),同来生成全1
tf.fill([3,2],6),生成指定数值

下面我们编写一个仅有一个初始值input的神经网络,并利用tensorflow实现对其进行前向传播。因为初始值仅有一个,实现的方法一共有两种,我们来看看第一种:

二.神经网络的前向传播(仅具一个初始值,方法一)

import tensorflow as tf

x=tf.constant([[0.7,0.5]])#注意这里,写了两个中括号啊!
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) #然后定义向前传播的过程
a=tf.matmul(x,w1)
y=tf.matmul(a,w2) #利用session计算前向传播的结果
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
print(sess.run(y))#这里使用run(y)打印出结果,因为最后一个输出我们定义的是y

输出:

[[3.0904665]]

三.神经网络的前向传播(仅具一个初始值,方法二)

我们利用placeholder进行数据的初始化,赋值给input,使用placeholder既可以赋一个值,也可以赋多个值,这也是它很常见的原因,代码如下:

import tensorflow as tf

x=tf.placeholder(tf.float32,shape=(1,2))
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) #同样地定义前向传播的过程
a=tf.matmul(x,w1)
y=tf.matmul(a,w2) #利用session计算前向传播的结果
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
print(sess.run(y,feed_dict={x:[[0.7,0.5]]}))#这里使用run(y)打印出结果,因为最后一个输出我们定义的是y

输出:

[[3.0904665]]

结果和方法一相同。接下来就可以对多个数据进行前向传播了,也是利用placeholder方法

四.神经网络的前向传播(多个初始值)

代码如下:

import tensorflow as tf

x=tf.placeholder(tf.float32,shape=(None,2))
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1) #同样地定义前向传播的过程
a=tf.matmul(x,w1)
y=tf.matmul(a,w2 #利用session计算前向传播的结果
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
print(sess.run(y,feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.5,0.5]]}))

输出:

[[3.0904665]
[1.2236414]
[2.5171587]]

完毕!看起来还是挺简单的吧!tensorflow在工业界的应用还是十分广泛的,想要创业和在业界工作的朋友就可以好好了解一下了!

Tensorflow实现神经网络的前向传播的更多相关文章

  1. 1. DNN神经网络的前向传播(FeedForward)

    1. DNN神经网络的前向传播(FeedForward) 2. DNN神经网络的反向更新(BP) 3. DNN神经网络的正则化 1. 前言 神经网络技术起源于上世纪五.六十年代,当时叫感知机(perc ...

  2. 实现属于自己的TensorFlow(一) - 计算图与前向传播

    前段时间因为课题需要使用了一段时间TensorFlow,感觉这种框架很有意思,除了可以搭建复杂的神经网络,也可以优化其他自己需要的计算模型,所以一直想自己学习一下写一个类似的图计算框架.前几天组会开完 ...

  3. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

  4. 神经网络,前向传播FP和反向传播BP

    1 神经网络 神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入.例如,下图就是一个简单的神经网络: 我们使用圆圈来表示神经网络的输入,标上“”的圆 ...

  5. 吴裕雄 python 神经网络——TensorFlow 三层简单神经网络的前向传播算法

    import tensorflow as tf w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) w2= tf.Variable( ...

  6. 跟我学算法-tensorflow 实现神经网络

    神经网络主要是存在一个前向传播的过程,我们的目的也是使得代价函数值最小化 采用的数据是minist数据,训练集为50000*28*28 测试集为10000*28*28 lable 为50000*10, ...

  7. Tensorflow笔记——神经网络图像识别(一)前反向传播,神经网络八股

      第一讲:人工智能概述       第三讲:Tensorflow框架         前向传播: 反向传播: 总的代码: #coding:utf-8 #1.导入模块,生成模拟数据集 import t ...

  8. TensorFlow笔记-04-神经网络的实现过程,前向传播

    TensorFlow笔记-04-神经网络的实现过程,前向传播 基于TensorFlow的NN:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型 张量(tenso ...

  9. tensorflow学习笔记(1)-基本语法和前向传播

    tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程.                                       图中的constant是个常量 计 ...

随机推荐

  1. 解决pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.问题

    国内的其他镜像源清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技 ...

  2. 01 . Memcached简介及部署

    Memcached简介 memcached是一个自由开源,高性能,分布式内存对象存储系统 基于内存的key-valued存储,用来存储小块的任意数据(字符串,对象) 他是一个简洁的key-value存 ...

  3. SpringBoot—单元测试模板(controller层和service层)

    介绍 概述   在开发过程中,我们经常会一股脑的写各种业务逻辑,经常等全部大功告成的时候,打个jar包放环境里跑跑看看能不能通,殊不知在各个业务方法中已经漏洞百出,修复一个打一个包,再继续修复,这种效 ...

  4. JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 Stri ...

  5. (Java实现) 零件分组

    零件分组(Stick)-动态规划-中高级 Case Time Limit:1000MS Time Limit: 3000MS Memory Limit: 65536K Total Submission ...

  6. Java中StringBuffer类的常用方法

    StringBuffer:StringBuffer类型 描述:在实际应用中,经常回遇到对字符串进行动态修改.这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加. ...

  7. java中PipedStream管道流通信详细使用(详解)

    多线程使用PipedStream 通讯 Java 提供了四个相关的管道流,我们可以使用其在多线程进行数据传递,其分别是 类名 作用 备注 PipedInputStream 字节管道输入流 字节流 Pi ...

  8. Java实现LeetCode_0027_RemoveElement

    package javaLeetCode.primary; import java.util.Scanner; public class RemoveElement_27 { public stati ...

  9. Python基础语法之“print()”函数

    print()函数是Python入门的第一个必学知识点,它经常被用来调试已写的代码,检验效果,今天小老鼠就带你盘点一下print()函数在Python中如何使用. print()函数的工作流程是这样的 ...

  10. syslog客户端java实现

    //package com.tony.util; import java.io.*; import java.net.*; /** * UDP客户端程序,用于对服务端发送数据,并接收服务端的回应信息. ...