2022-02-18
输入—>神经网络(黑盒)—>输出
每一层都有其对应的内容、功能和作用。
一般来说,神经网络 ( ) 是由一系列神经层组成的系统,对输入进行处理然后输出。
神经网络处理:
()—“神经网络层处理—“代表特征( )—“再次神经网络层处理—“另一个代表特征…
也就是将一个代表特征转化为另一个代表特征,特征之间的转换一次次,也就是越来越深入的理解。
代表性特征通常只有计算机本身才能理解。
02-数据流图(数据流)
使用数据流图(data flow)进行计算,也就是说,图( graph或data flow graph)是一种Graph数据结构。
先创建一个数据流图,然后将数据(以()的形式)放入数据流图中进行计算。
数据在输入层输入,在隐藏层处理,在输出层输出。
张量流过图,在每个节点上由一条指令操作,一条指令的输出张量通常成为后续指令的输入张量。
动画:
注意:这里的演示图像使用梯度下降处理,梯度下降会更新几个参数并完美,更新后的参数去隐藏层再次学习,以此类推,直到结果收敛。
在训练模型时,会不断地从数据流图中的一个节点流向另一个节点,这就是名字的由来。
节点只会在需要时根据相关节点的需要进行计算。
许多程序由一个图组成,但程序可以选择创建多个图。
编程本质上是一个两步过程:
将常量、变量和指令集成到一个图形中。在一个会话中评估这些常量、变量和指令。
03 – 张量()
在 中,变量统称为 ()。
() 是一个任意维度的数组。
在大多数情况下,只会使用一个或多个低维张量(2 阶及以下)。
典型程序中的大多数代码行都是指令,张量也是计算图中的一种指令。
张量可以作为常量或变量存储在图形中。
04 – 示例:处理结构
此示例简要演示了如何在代码中运行构建的结构:
1 # coding=utf-8 2 import tensorflow as tf 3 import numpy as np # 使用numpy创建数据 4 import os 5 6 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 7 8 # ### 创建数据 9 x_data = np.random.rand(100).astype(np.float32) # 生成float32类型的100个随机数列 10 y_data = x_data * 0.1 + 0.3 11 # print("x_data:n{} ny_data:n{}".format(x_data, y_data)) 12 13 # ### 创建TensorFlow结构 开始### 14 # 搭建模型 15 Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) # 定义权重变量:1维结构,随机数值范围为“-1.0”到“1.0” 16 biases = tf.Variable(tf.zeros([1])) # 定义偏差:初始值定义为0 17 # print("Weights:{}nbiases:{}".format(Weights, biases)) 18 y = Weights * x_data + biases # 预测的y值 19 # 计算误差 20 loss = tf.reduce_mean(tf.square(y - y_data)) # 计算误差:计算预测值y和真实值y_data的误差 21 # 传播误差(反向传递误差,使用优化器减少误差) 22 optimizer = tf.train.GradientDescentOptimizer(0.5) # 优化器使用梯度下降法(Gradient Descent)进行参数的更新,学习效率为0.5 23 train = optimizer.minimize(loss) # 使用优化器减少误差 24 # 激活Variable 25 init = tf.global_variables_initializer() # 必须初始化所有定义的Variable 26 # ### 创建TensorFlow结构 结束### 27 28 # ### 训练 29 with tf.Session() as sess: # 创建会话 30 sess.run(init) # 用Session来执行init初始化步骤 31 for step in range(201): 32 sess.run(train) # 用Session来run每一次training的数据,逐步提升神经网络的预测准确性 33 if step % 20 == 0: # 每隔20次打印Weights和biases 34 print("Steps:{} Weights:{} Biases:{}".format(step, sess.run(Weights), sess.run(biases))) 35 36 # ### 处理结构 37 # 在TensorFlow中必须先建立神经网络的结构, 才能放入数据,最终运行这个结构; 38 # 本例简单演示了在TensorFlow中如何用代码来运行搭建的结构;
p>
05 – 示例:()
1 # coding=utf-8 2 import tensorflow as tf 3 import os 4 5 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 6 7 matrix1 = tf.constant([[3, 3]]) # 定义一个一行两列的矩阵常量 8 matrix2 = tf.constant([[2], 9 [2]]) # 定义一个两行一列的矩阵常量 10 print("matrix1: ", matrix1, "nmatrix2: ", matrix2, ) 11 12 product = tf.matmul(matrix1, matrix2) # 定义矩阵相乘(matrix multiply),但不进行计算 13 14 # 使用Session的形式 - 不推荐 15 sess = tf.Session() # 注意Session的首字母大写 16 result = sess.run(product) # 在Session中激活product并得到计算结果 17 print("result:", result) 18 sess.close() # 关闭session 19 20 # 使用Session的形式 - 推荐 21 with tf.Session() as sess2: 22 result2 = sess2.run(product) 23 print("result2:", result2) 24 25 # ### 会话控制(Session) 26 # 在TensorFlow中,Session是控制和输出文件的执行语句 27 # 运行session.run()可以获得运算结果, 或者控制运算
06 – 示例:变量()
1 # coding=utf-8 2 import tensorflow as tf 3 import os 4 5 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 6 7 state = tf.Variable(6, name='counter') # 在TensorFlow中变量必须先被定义,变量counter的初始值值为6 8 print("tf.Variable(6, name='counter'):", state.name, state) 9 10 one = tf.constant(1) # 定义常量one,值为1 11 print("tf.constant(1):", one) 12 13 new_value = tf.add(state, one) # 定义加法步骤,但并没有直接计算 14 print("tf.add(state, one):", new_value) 15 update = tf.assign(state, new_value) # 加载new_value到state 16 print("tf.assign(state, new_value):", update) 17 18 init = tf.global_variables_initializer() # 必须初始化变量! 19 20 # 演示:在Session中完成变量和常量的相加 21 with tf.Session() as sess: 22 sess.run(init) # 在Session中激活变量 23 for _ in range(3): 24 sess.run(update) # 在Session调用前面定义的update 25 # print(state) # 无法打印出state内容 26 print(sess.run(state)) # 需要将Session的指针指向state,才能打印出state内容 27 28 # ### 变量(Variable) 29 # 定义语法: state = tf.Variable() 30 # 如果定义Variable, 就必须要initialize
@ >
07 – 示例:传入值()
1 # coding=utf-8 2 import tensorflow as tf 3 import os 4 5 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 6 7 input1 = tf.placeholder(tf.float32) # 定义placeholder的type为float32 8 input2 = tf.placeholder(tf.float32) 9 output = tf.multiply(input1, input2) # 将input1和input2做乘法运算(multiply)并输出为 output 10 11 with tf.Session() as sess: 12 print(sess.run(output, feed_dict={input1: [8], input2: [2]})) # 需要传入的值放在feed_dict={},并一一对应每一个input 13 14 # ### 传入值(Placeholder) 15 # placeholder是TensorFlow中的占位符,暂时储存变量; 16 # 使用tf.placeholder()可以从外部传入data到TensorFlow; 17 # 传输数据的形式为:“sess.run(***, feed_dict={input: **})”,也就是说通过sess.run()完成传值;
08 – 激励函数( , AF)
线性方程( )和非线性方程( )
激活函数( )
一个函数(如ReLU或函数),用于对上一层的所有输入进行加权求和,然后生成一个输出值(通常是非线性值)并传递给下一层。
引入激励函数,解决日常生活中线性方程不能泛化的问题。
激励函数(AF)其实是另外一个非线性函数,比如relu, , tanh等,嵌套在原来的线性结果之上,使得输出结果也具有非线性特征。
您可以创建自己的激发函数(必须是可微分的)来处理您自己的问题。
当误差反向传播时,只有可微分激励函数才能将误差传递回去。
常见的选择
如果神经网络只有两三层,那么对于隐藏层,任何激活函数都可以。
如果使用特殊的多层神经网络,必须仔细选择激励函数,避免出现梯度爆炸和梯度消失的问题。
默认首选激励函数:
官网信息
提供激励函数(-):
类别:
技术要点:
相关文章:
暂无评论内容