莫烦python基础教程_莫烦PYTHON | Tensorflow教程——Tensorflow基础构架(第二章)

莫烦PYTHON | Tensorflow教程——Tensorflow基础构架(第二章)

发布时间:2018-06-22 02:22,

浏览次数:321

, 标签:

PYTHON

Tensorflow

2.1 处理结构

计算图纸

Tensorflow首先要定义神经网络的结构,然后再把数据放入结构当中进行运算和训练。

我们要做得就是要建立一个这样的结构,然后把数据放进去,之后tensorflow就可以自己运行,tensorflow字面意思翻译过来就是向量在里面飞。

上图就是一个循环,从输入层输入数据,数据飞到隐藏层再到输出层,用梯度下降法处理,完成对几个参数的更新,用更新之后的参数再次应用到隐藏层中去学习,不停的循环直至结果收敛。

TensorFlow是采用数据流图(data flow

graphs)来计算,所以首先我们得创建一个数据流流图,然后再将我们的数据(数据以张量(tensor)的形式存在)放在数据流图中计算。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。训练模型时tensor会不断的从数据流图中的一个节点flow到另一节点,这就是TensorFlow名字的由来。

Tensor 张量意义

张量有多种:

零阶张量:纯量/标量(scalar),是一个数值,比如[1]

一阶张量:向量(vector)一维

二阶张量:矩阵(matrix)二维

等等

2.2 例子2

#加载这两个模块,并使用numpy来创建我们的数据 import tensorflow as tf import numpy as np #科学计算的模块

# create data x_data = np.random.rand(100).astype(np.float32)

#随机生成100个数,定制成float32的形式 y_data = x_data*0.1 + 0.3 ###开始创建结构### Weights = tf

.Variable(tf.random_uniform([1], -1.0, 1.0)) #随机生成一个1维的-1到1的范围的数 biases = tf

.Variable(tf.zeros([1])) #定义w和b,b初始定义为0的1维数 y = Weights*x_data + biases

#拟合公式y,预测的y loss = tf.reduce_mean(tf.square(y-y_data))

#误差公式loss,预测值y和真实值y_data的差 optimizer = tf.train.GradientDescentOptimizer(0.5)

#使用GradientDescentOptimizer优化器,学习效率<1 train = optimizer.minimize(loss) #用优化器减小误差

# init = tf.initialize_all_variables() # tf 马上就要废弃这种写法,用下面这种 init = tf.global

_variables_initializer()#初始化结构 ###结束创建结构### sess = tf.Session()

#session像一个指针,指向要处理的地方 sess.run(init) # Very important,激活init for step in range(

201): #训练201步 sess.run(train) #要训练train,也就是optimizer if step % 20 == 0:

print(step, sess.run(Weights), sess.run(biases)) #每20步打印一次结果,sess.run指向w和b并输出

结果:

2.3 Session 会话控制

Session是Tensorflow为了控制、输出文件的执行语句。运行session.run()可以得到运算结果。

Session的两种打开方式

import tensorflow as tf # create two matrixes matrix1 = tf.constant([[3,3]])

#行向量 matrix2 = tf.constant([[2], [2]]) #列向量 product =

tf.matmul(matrix1,matrix2) #矩阵乘法 matrixl

multiply,在numpy中是np.dot(matrix1,matrix2) # method1 sess = tf.Session()

#Session是一个object,首字母要大写 result = sess.run(product)

#因为product不是直接计算的步骤,所以需要Session来激活product并得到计算结果,这是Tensorflow的思考模式print(result)

sess.close() #有没有都可以,写上会显得比较完整 # method2 with tf.Session() as sess:

#我们打开tf.Sesssion并命名成sess,再执行下面的代码,执行完之后自动关闭,不需要手动close result2 =

sess.run(product)print(result2)

结果:

2.4 Variable 变量

在定义变量上python与tensorflow不同

tensorflow语法:state = tf.Variable()

如果在tensorflow中定义了变量,那么一定要初始化变量:init = tf.initialize_all_variables() # tf

马上就要废弃这种写法,用下面这种

init = tf.global_variables_initializer()

import tensorflow as tf state = tf.Variable(0, name='counter')

#定义一个变量,令他的初始值为0,命名为counter # 定义常量one 初始值为1 one = tf.constant(1) # 定义加法步骤 (注:

此步并没有直接计算) new_value = tf.add(state, one) # 将 State 更新成

new_value,把new_value加到state上 update = tf.assign(state, new_value) # 如果定义

Variable, 就一定要用 initialize # init = tf.initialize_all_variables() # tf

马上就要废弃这种写法 init = tf.global_variables_initializer() # 替换成这样就好 # 使用 Session with

tf.Session()as sess: sess.run(init) #执行 初始化所有的变量 for _ in range(3):

sess.run(update)#执行update print(sess.run(state)) #执行state并打印

2.5 Placeholder 传入值

placeholder是tensorflow的占位符,暂时存储变量,tensorflow要从外部传入数据,就要用到placeholder。

要给节点输入数据时用 placeholder,在 TensorFlow 中用placeholder

来描述等待输入的节点,只需要指定类型即可,然后在执行节点的时候用一个字典来“喂”这些节点。相当于先把变量 hold 住,然后每次从外部传入data,注意

placeholder 和 feed_dict 是绑定一起用的。

feed机制:给feed提供数据,作为run()调用的参数,feed只在调用它的方法内有效,方法结束,feed就会消失。

语法:

tf.placeholder() sess.run(xxx,feed_dict={input:xx}) import tensorflow as tf #在

Tensorflow 中需要定义 placeholder 的 type ,一般为 float32 形式 input1 = tf.placeholder(tf

.float32) input2 = tf.placeholder(tf.float32) # mul = multiply 是将input1和input2

做乘法运算,并输出为 output ouput = tf.multiply(input1, input2)

#传值工作交给sess.run(),需要传入的值放在了feed_dict={},并一一对应每一个input with tf.Session() as

sess: print(sess.run(ouput, feed_dict={input1: [7.], input2: [2.]})) # 结果:[ 14.]

2.6 什么是激励函数

为了解决不能用线性函数表达的问题

已知的激励函数有很多种,根据不同的神经网络选择不同的激励函数,当然,也可以自己构造出一个激励函数,但是构造的这个函数必须可微分,因为你要进行反向传播求导。

原函数y=Wx,这里的AF就是指的激励函数,激励函数拿出自己最擅长的”掰弯利器”,套在了原函数上 用力一扭,原来的 Wx 结果就被扭弯了。

而这个AF其实就是另一个非线性函数,将这些掰弯利器嵌套在原有的结果之上,强行把原有的线性结果给扭曲了,使得输出结果 y 也有了非线性的特征。

常用选择

在浅层神经网络中,可以使用任意的激励函数,可以随便掰弯,不会有很大的影响,但是对于多层神经网络,会涉及到梯度爆炸以及梯度消失等问题。

对于少量层结构的神经网络:

卷积神经网络CNN:relu函数

循环神经网络RNN:tanh函数或者relu函数

2.7 激励函数 activation function

激励函数运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经系统。激励函数的实质是非线性方程。Tensorflow

的神经网络里面处理较为复杂的问题时都会需要运用激励函数。

下图是常见的几种激励函数,x表示传递过来的值,y表示传递出去的值。

激励函数在隐藏层/预测层,判断哪些值要被送到预测结果那里。

tensorflow提供的一些激励函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值