zoukankan      html  css  js  c++  java
  • Tensorflow实现神经网络的前向传播

    我们构想有一个神经网络,输入为两个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在工业界的应用还是十分广泛的,想要创业和在业界工作的朋友就可以好好了解一下了!

  • 相关阅读:
    Javascript面向对象编程:非构造函数的继承
    JavaScript中this 详解
    构造函数与 new 命令
    JavaScript数组去重的6个方法
    初学Java Web(9)——学生管理系统(简易版)总结
    初学Java Web(8)——过滤器和监听器
    初学Java Web(7)——文件的上传和下载
    初学Java Web(6)——JSP学习总结
    初学Java Web(5)——cookie-session学习
    初学Java Web(4)——Servlet学习总结
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13179113.html
Copyright © 2011-2022 走看看