Tensorflow入门

训练神经网络的过程

1.定义神经网络的结构和前向传播的输出结果
2.定义损失函数以及选择反向传播优化的算法
3.生成会话(tf.Session),并且在训练数据上反复运行反向传播优化算法。
无论神经网络的结构如何变化,这三个步骤是不变的。

Tensorflow里最基本的三个概念

1.计算图(计算模型)
2.张量(数据模型)
3.会话(运行模型)

Tensorflow程序的两个阶段:

1.定义计算图中的所有计算
2.执行计算(声明一个会话并通过会话计算结果)

计算模型—计算图
  • 定义计算
    (自动将定义的计算转化为计算图上的节点
Import tensorflow as tf
a = tf.constant([1.0,2.0],name = “a”,dtype = tf.float32)
b = tf.constant([2.0,3.0],name = “b”)//默认为int32
result = a+b
  • 在计算图g1中定义变量“v”,并设置初始值为0
    (变量的作用就是保存和更新神经网络中的参数)
g1=tf.Graph()
with g1.as_default():
	v = tf.get_variable(“v”,initializer = tf.zeros_initializer(shape=[1]))
  • Tensorflow会自动生成一个默认的计算图,如果没有特殊指定,运算会自动加入这个计算图中。
    获取默认计算图:tf.get_default_graph()
    生成新的计算图g1:g1 = tf.Graph()
    通过tf.Graph.device函数来指定运行计算的设备
with g1.device(/gpu:0);
	result = a+b

1.不同计算图上的张量和运算都不会共享
2.在一个计算图中可以通过集合来管理不同类别的资源
通过tf.get_collection获取一个集合里面所有的资源(变量、张量或者运行Tensorflow程序所需的队列资源)

数据模型—张量
  • 所有数据都通过张量的形式来表示,可以理解为多维数组
    0阶张量表示标量,一阶张量表示为向量,n阶张量表示为n维数组
    张量主要保存三个属性:名字、纬度、类型
    Tensor(“add:0”,shape = (2,),dtype = float32)

  • 张量的使用
    1.对中间计算结果的引用
    2.当计算图构造完成后,张量可以用来获得计算结果
    张量本身没有存储具体的数字,但通过会话可以得到具体数字tf.Session().run(result)

运行模型—会话
  • 会话拥有并管理Tensorflow程序运行时的所有资源,所有计算完成之后需要关闭会话来帮助系统回收资源。

  • 会话模式有两种
    1.明确调用会话生成函数和关闭会话函数

sess = tf.Session()//创建会话
sess.run(result)//获取张量result的值
sess.close()//关闭会话释放资源

2.为了解决异常退出后关闭会话函数没有被指执行导致的资源泄漏,可以通过Python上下文管理器来使用会话

with tf.Session() as sess:
	sess.run(result)
  • 设定默认会话计算张量的取值
sess = tf.Session()
with sess.as_default():
	print(result.eval())

或者

sess = tf.Session()
print(sess.run(result))或者print(result.eval(session=sess))
  • 使用tf.InteractiveSession函数自动将生成的会话注册为默认会话
sess = tf.InteractiveSession()
print(result.eval())
sess.close()
  • 通过ConfigProto Protocol Buffer来配置需要生成的会话
    (并行的线程数、GPU分配策略、运算超时时间等)
    config = tf.ConfigProto(allow_soft_placement = True,log_device_placement = True)
    第一个参数:GPU运算可以放在CPU上运行
    第二个参数:记录每个节点被安排在哪个设备上以方便调试
sess1 = tf.IntertactiveSession(config = config)
sess2 = tf.Session(config=config)

Tensorflow实现神经网络

使用神经网络解决分类问题:
1.提取问题中实体的特征向量作为神经网络的输入
2.定义神经网络的结构,并定义如何从神经网络的输入得到输出(神经网络的前向传播算法)
3.通过训练数据来调整神经网络中参数的取值
4.使用训练好的神经网络来预测未知的数据

前向传播算法简介(全连接网络)

不同输入的权重就是神经元的参数,神经网络的优化过程就是优化神经元中参数取值的过程
前向传播算法就是矩阵乘法:

a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
  • 神经网络参数与TensorFlow变量
    在Tensorflow中,变量的作用就是保存和更新神经网络中的参数,给参数赋予随机初始值最为常见
weights = tf.Variable(tf.random_normal([2,3],stddev = 2))

(声明了一个2*3的矩阵变量,矩阵元素均值为0,标准差为2的随机数)

  • 在神经网络中,偏置项通常会使用常数来设置初始值
    biases = tf.Variable(tf.zeros([3]))

  • 使用其他变量的初始值来初始化新的变量
    w2 = tf.Variable(weights.initialized_value())

  • 一个“变量”的值在被使用之前,这个变量的“初始化过程”需要被明确的调用

sess = tf.Session()
sess.run(w1.initializer)//初始化w1
sess.run(w2.initializer)//初始化w2
print(sess.run(y))
sess.close()
  • 通过tf.global_variables_initializer函数实现初始化所有变量(所有的变量都会被自动加入到GraphKeys.VARIABLES)
init_op = tf.global_variables_initializer()
sess.run(init_op)
  • 使用监督学习的方式设置神经网络的参数
    需要标注好的训练数据

  • 在神经网路优化算法中,最常用的方法是反向传播算法。
    步骤(迭代的过程):
    1.选取一小部分训练数据(batch,有正确答案标注)
    2.计算当前神经网络模型的预测答案与正确答案之间的差距
    3.基于差距更新神经网络参数的取值,使得在这个batch上神经网络的预测结果和真实答案更加接近

  • placehoder用于提供输入数据(替代常量)
    x = tf.placeholder(tf.float32,shape=(1,2),name=“input”)

  • 在计算前向传播结果时,需要提供一个feed_dict来指定x的取值
    print(sess.run(y,feed_dict = {x:[[0.7,0.9]]}))

  • 一次性计算多个样例的前向传播结果

x = tf.placeholder(tf.float32,shape=(3,2),name=input)
print(sess.run(y,feed_dict = {x:[[0.7,0.9],[0.1,0.4],[0.5,0.8]]}))
  • 在得到一个batch的前向传播结果之后,需要定义一个损失函数来刻画当前的预测值和真实答案之间的差距,然后通过反向传播算法来调整参数使差距缩小
    cross_entropy(损失函数)
    train_step(优化算法)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值