算法工程师修仙之路:TensorFlow(五)

本文介绍了使用TensorFlow构建神经网络的基础知识,包括神经元的概念、全连接神经网络结构及前向传播算法。通过实例展示了如何利用矩阵乘法计算神经网络的输出,并提供了TensorFlow代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TensorFlow 入门

TensorFlow实现神经网络


前向传播算法简介

  • 神经元是构成一个神经网络的最小单元,神经元也可以称之为节点。

    • 一个神经元有多个输入和一个输出;
    • 每个神经元的输入既可以是其他神经元的输出,也可以是整个神经网络的输入;
    • 所谓神经网络的结构指的就是不同神经元之间的连接结构。
  • 一个最简单的神经元结构的输出就是所有输入的加权和,而不同输入的权重就是神经元的参数。神经网络的优化过程就是优化神经元中参数取值的过程。

  • 全连接神经网络是相邻两层之间任意两个节点之间都有连接的神经网络结构。

  • 一个简单的判断零件是否合格的三层全连接神经网络。
    在这里插入图片描述

    • 计算神经网络的前向传播结果需要三部分信息。
      • 第一个部分是神经网络的输入,这个输入就是从实体中提取的特征向量。
        • 在图中有两个输入,一个是零件的长度x1x_1x1,一个是零件的质量x2x_2x2
      • 第二个部分为神经网络的连接结构。
        • 神经网络是由神经元构成的,神经网络的结构给出不同神经元之间输入输出的连接关系。
        • 在图中,a11a_{11}a11节点有两个输入,他们分别是x1x_1x1x2x_2x2的输出。而a11a_{11}a11的输出则是节点yyy的输入。
      • 最后一个部分是每个神经元中的参数。
        • 在图中用WWW来表示神经元中的参数。
        • WWW的上标表明了神经网络的层数,比如以W(1)W^{(1)}W(1)表示第一层节点的参数,而以W(2)W^{(2)}W(2)表示第二层节点的参数。
        • W 的下标表明了连接节点编号,比如W1,2(1)W_{1,2}^{(1)}W1,2(1)表示连接x1x_1x1a12a_{12}a12节点的边上的权重。
    • 给定神经网络的输入、神经网络的结构以及边上权重,就可以通过前向传播算法来计算出神经网络的输出。
  • 神经网络前向传播算法示意图
    在这里插入图片描述

    • 图中给出了输入层的取值x1=0.7x_1=0.7x1=0.7x2=0.9x_2=0.9x2=0.9
    • 从输入层开始一层一层地使用向前传播算法。
    • 首先隐藏层中有三个节点,每一个节点的取值都是输入层取值的加权和。
    • 在得到第一层节点的取值之后,可以进一步推导得到输出层的取值。
    • 类似地,输出层中节点的取值就是第一层的加权和。
    • 因为这个输出值大于阈值0,所以在这个样例中最后给出的答案是:这个产品是合格的。这就是整个前向传播的算法。
  • 前向传播算法可以表示为矩阵乘法。

    • 将输入x1,x2x_1, x_2x1,x2组织成一个1∗21*212的矩阵x=[x1,x2]x=[x_1, x_2]x=[x1,x2],而W(1)W^{(1)}W(1)组织成一个2∗32*323的矩阵:
      W(1)=[W1,1(1)W1,2(1)W1,3(1)W2,1(1)W2,2(1)W2,3(1)] W^{(1)}= \begin{bmatrix} W_{1,1}^{(1)} & W_{1,2}^{(1)} & W_{1,3}^{(1)} \\ W_{2,1}^{(1)} & W_{2,2}^{(1)} & W_{2,3}^{(1)} \end{bmatrix} W(1)=[W1,1(1)W2,1(1)W1,2(1)W2,2(1)W1,3(1)W2,3(1)]
    • 这样通过矩阵乘法可以得到隐藏层三个节点所组成的向量取值:
      a(1)=[a11,a12,a13]=xW(1)=[W1,1(1)x1+W2,1(1)x2,W1,2(1)x1+W2,2(1)x2,W1,3(1)x1+W2,3(1)x2]a^{(1)}=[a_{11}, a_{12}, a_{13}]=xW^{(1)}=[W_{1,1}^{(1)}x_1+W_{2,1}^{(1)}x_2, W_{1,2}^{(1)}x_1+W_{2,2}^{(1)}x_2, W_{1,3}^{(1)}x_1+W_{2,3}^{(1)}x_2]a(1)=[a11,a12,a13]=xW(1)=[W1,1(1)x1+W2,1(1)x2,W1,2(1)x1+W2,2(1)x2,W1,3(1)x1+W2,3(1)x2]
    • 类似的输出层可以表示为:
      [y]=a(1)W(2)=[W1,1(2)a11+W2,1(2)a12+W3,1(2)a13][y]=a^{(1)}W^{(2)}=[W_{1,1}^{(2)}a_{11}+W_{2,1}^{(2)}a_{12}+W_{3,1}^{(2)}a_{13}][y]=a(1)W(2)=[W1,1(2)a11+W2,1(2)a12+W3,1(2)a13]
  • 在 TensorFlow 中矩阵乘法是通过 tf.matmul 实现的。

    # 以下 TensorFlow 程序实现了图中所示神经网络的前向传播过程。
    x = [[0.7, 0.9]]
    w1 = [[0.2, 0.1, 0.4], [0.3, -0.5, 0.2]]
    w2 = [[0.6,], [0.1,], [-0.2,]]
    a = tf.matmul(x, w1)
    y = tf.matmul(a, w2)
    
    with tf.Session() as sess:
        print(sess.run(a))
    # [[ 0.41000003 -0.38        0.45999998]]
    
    with tf.Session() as sess2: 
        print(sess2.run(y))
    # [[ 0.11600002]]
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值