Placeholder 传入值
placeholder是tensorflow的占位符,暂时存储变量,tensorflow要从外部传入数据,就要用到placeholder。
要给节点输入数据时用 placeholder,在 TensorFlow 中用placeholder 来描述等待输入的节点,只需要指定类型即可,然后在执行节点的时候用一个字典来“喂”这些节点。相当于先把变量 hold 住,然后每次从外部传入data,注意 placeholder 和 feed_dict 是绑定一起用的。
feed机制:给feed提供数据,作为run()调用的参数,feed只在调用它的方法内有效,方法结束,feed就会消失。
import tensorflow as tf
# 在TensorFlow中需要定义placeholder的type,一般为float32形式
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2) # 将input1和input2做乘法运算,并输出为output
with tf.Session() as sess:
print(sess.run(output, feed_dict={input1: [7.], input2: [2.]}))
结果
E:\Anaconda\python.exe D:/code/tutorials-master(莫烦示例)/tensorflowTUT/tensorflow8_feeds.py
[ 14.]
激励函数
为了解决不能用线性函数表达的问题
已知的激励函数有很多种,根据不同的神经网络选择不同的激励函数,当然,也可以自己构造出一个激励函数,但是构造的这个函数必须可微分,因为你要进行反向传播求导。
原函数y=Wx,这里的AF就是指的激励函数,激励函数拿出自己最擅长的”掰弯利器”,套在了原函数上 用力一扭,原来的 Wx 结果就被扭弯了。
而这个AF其实就是另一个非线性函数,将这些掰弯利器嵌套在原有的结果之上,强行把原有的线性结果给扭曲了,使得输出结果 y 也有了非线性的特征。
常用选择
在浅层神经网络中,可以使用任意的激励函数,可以随便掰弯,不会有很大的影响,但是对于多层神经网络,会涉及到梯度爆炸以及梯度消失等问题。
对于少量层结构的神经网络:
卷积神经网络CNN:relu函数
循环神经网络RNN:tanh函数或者relu函数
激励函数运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经系统。激励函数的实质是非线性方程。Tensorflow 的神经网络里面处理较为复杂的问题时都会需要运用激励函数。
下图是常见的几种激励函数,x表示传递过来的值,y表示传递出去的值。
激励函数在隐藏层/预测层,判断哪些值要被送到预测结果那里。