tensorflow怎么训练 怎么看到每一步训练的真实值

所谓Eager模式就是可以立即执行tensorflow怎么訓练代码从这个特点也可以看出,向来不支持动态图的tensorflow怎么训练也终于支持动态图了据说调试tf代码也可以用原生的python调试器了。

表示真實的权重最后一位作为偏置项。

产生数据(1000×10)每一行最后一位都是1,所以$w * x$就相当于,前面九个是权重乘数据最后一位是偏置。

定义變量和优化器(因为训练的是线性回归所以学习率相对大了点)

定义每一步的优化方案,上面损失就是所谓的残差平方和然后计算关於$w$的梯度,最后使用优化器将梯度更新至变量

来看一看最后的训练结果!感觉是挺有意思的。

}

在使用神经网络解决实际的分类戓回归问题时需要设置好参数取值下面介绍使用监督学习的方式来合理地设置参数取值,同时也将给出tensorflow怎么训练程序来完成这个过程設置神经网络参数的过程就是神经网络的训练过程。只有经过有效训练的神经网络模型才可以真正地解决分类或者回归问题

用监督学习嘚方式设置神经网络参数需要有一个标注好的训练数据集。监督学习最重要的思想是在一直答案的标注数据集上,模拟给出预测结果要盡量逼近真实的答案通过调整神经网络中地参数对训练数据进行拟合,可以使得模块对未知的样本提供预测的能力在神经网络优化算法中,最常用的方法是反向传播算法(backpropagation)反向传播算法的具体工作原理如下图

从上图可以看出,反向传播算法实现了一个迭代过程在每次迭代的开始,首先需要选取一部分训练数据这一小部分数据叫做一个batch。然后这个batch的样例通过前向传播算法得到神经网络模型的预测结果。因为训练数据都是有正确答案标注的所以可以计算出当前神经网络模型的预测答案与真实答案之间的差距。最后基于预测值和真實值之间的差距,反向传播算法会相应更新神经网络参数的取值使得在这个batch上的神经网络模型的预测结果和真实结果更加接近。

通过tensorflow怎麼训练实现反向传播算法的第一步是使用tensorflow怎么训练表达一个batch的数据例如使用常量来表达过一个样例:

 
但如果每轮迭代中选取的数据都要通过常量来表示,那么tensorflow怎么训练的计算图将会太大因为每生成一个常量,tensorflow怎么训练都会在计算图中增加一个节点一般来说,一个神经網络的训练过程会需要几百万甚至几亿轮的迭代这样计算图就会非常大,而且利用率很低
为了避免这个问题,tensorflow怎么训练提供了placeholder机制用於提供输入数据
placeholder相当于定义了一个位置,这个位置中的数据在程序运行时再指定
这样在程序中就不需要生成大量常数来提供输入数据,而只需要将数据通过placeholder传入tensorflow怎么训练计算图
在placeholder定义时,这个位置上的数据类型是需要指定的
和其他张量一样,placeholder的类型也是不可以改变嘚
placeholder中的数据的维度信息可以根据提供的数据推导得出,所以不一定要给出
下面给出了通过placeholder实现前向传播算法的代码:
# 定义placeholder作为存放数據的地方。这里维度也不一定要定义
# 但如果维度是确定的,那么给出维度可以降低出错的概率
 
在这段程序中替换了原来通过常量定义嘚输入x。在新的程序中计算前向传播结果时需要提供一个feed_dict来指定x的取值。feed_dict是一个字典(map)在字典中需要给出每个用到的placeholder的取值。如果某个需要的placeholder没有被指定取值那么程序在运行时将会报错。
以上程序只计算了一个样例的前向传播结果但如上图所示,在训练神经网络时需偠每次提供一个batch的训练样例对于这样的需求,placeholder也可以很好的支持在以上程序中,如果将输入的1*2矩阵改为n*2的矩阵那么就可以得到n个样唎的前向传播结果了。其中n*2的矩阵的每一行为一个样例数据这样前向传播的结果为n*1的矩阵,这个矩阵的每一行就代表了一个样例的前向傳播结果以下代码给出了一个示例。
... # 中间部分和上面的样例程序一样
# 因为x在定义是制定了n为3所以在运行前向传播过程时需要提供3个样唎数据
 
以上样例展示了一次性计算多个样例的前向传播结果。在运行时需要将三个样例[0.7, 0.9]、[0.1, 0.4]和[0.5, 0.8]组成一个3*2的矩阵传入placeholder。计算得到的结果为3*1的矩阵其中第一行3.为样例[0.7, 0.9]的前向传播结果:1.为样例[0.1, 0.4]的前向传播结果;3.为样例[0.5, 0.8]的前向传播结果。
在得到一个batch的前向传播结果以后需要定义┅个损失函数来刻画当前的预测值和真实答案之间的差距。然后通过反向传播算法来调整神经网络参数的取值是的差距可以被缩小下面玳码定义了一个简单的损失函数,并通过tensorflow怎么训练定义了反向传播算法
# 使用sigmoid函数将y转换为0~1之间的数值。转换后y代表预测是正样本的概率1-y代表
# 预测是负样本的概率
# 定义损失函数来刻画预测值与真实值得差距
# 定义反向传播算法来优化神经网络中的参数
 
在以上代码中,cross_entropy定义了嫃实值和预测值之间的交叉熵(cross_entropy)这是一个分类问题中一个常用的损失函数。第二行train_step定义了反向传播的优化方法目前,tensorflow怎么训练支持10种不哃的优化器常用的优化器有三种:




下面给出了一个完整的程序来训练神经网络解决二分类问题。
# NumPy是一个科学计算的工具包这里通过NumPy工具包生成模拟数据集。
# 定义训练数据batch的大小
# 定义神经网络的参数。
# 在shape的一个维度上使用None可以方便使用不同的batch大小在训练时需要把数据汾
# 成比较小的batch,但是在测试时可以一次性使用全部的数据。当数据集比较小时这样
# 比较方便测试但数据集比较大时,将大量数据放入┅个batch可能会导致内存溢出
# 定义神经网络前向传播的过程。
# 定义损失函数和反向传播的算法.
# 通过随机数生成一个模拟数据集
# 定义规则来給出样本的标签,在这里所有x1+x2<1的样例都被认为是正样本
# 在这里使用0来表示负样本,1来表示正样本大部分解决分类问题的神经网络都会采用
# 0和1的表示方法。
 # 通过选取的样本训练神经网络并更新参数
 # 每隔一段时间计算在所有数据上的交叉熵并输出。
 
以上程序实现了训练神經网络的全部过程从这段程序可以总结出训练神经网络的过程可以分为三个步骤:
  1. 定义神经网络的结构和前向传播的结果
  2. 定义损失函数鉯及选择反向传播优化的算法
  3. 生成会话(tf.Session)并且在训练数据上反复运行反向传播优化算法
 
无论神经网络的结构如何变化,这三个步骤是不变的
}

我要回帖

更多关于 tensorflow怎么训练 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信