tensorflow2自定义训练 【这里包含了如何绘制训练过程中参数的变化append ,plot,如何绘制数据集scatter】

1.Tensorflow中的tensor是不可变无状态对象.
机器学习模型需要可改变状态,比如模型训练和模型预测的代码是相同的,但变量值随着时间而不同(希望尽量小的loss),为了因对随着计算而改变的状态,可以利用Python的状态可变性。

2.Tensorflow,拥有内建可变状态操作,比使用底层Python状态表示更常见。
比如表示模型的权重,使用Tensorflow变量更方便高效。
变量是一个对象,这个对象存储着数值,当在Tensorflow计算中使用时,会隐式的读取这个存储的数值。
有一些操作(tf.assign_sub,tf.scatter_update等)会复制Tensorflow变量存储的数值。

3.计算梯度时,会自动跟踪使用变量的计算过程。
用变量来表示向量时TensorFlow会默认使用稀疏更新,这样可以带来计算和存储高效性。
使用变量也是一种更快的提醒方式,就是代码的这部分是状态可分的???

4.创建和训练一个简单的模型,一般需要下面这些步骤:
1.定义模型
2.定义损失函数
3.获取训练数据
4.通过训练数运行模型,使用“optimizer”来调整变量来满足数据
tensorflow2自定义训练 【这里包含了如何绘制训练过程中参数的变化append ,plot,如何绘制数据集scatter】_第1张图片

一定自己的模型
定义自己的损失函数
获取训练数据(自己的数据预处理过程)
定义训练循环def train函数
设置epochs 循环训练
以及变化过程图都在tensorflow中的教程—自定义–自定义训练中。
【very important】

==默认情况下,Tensorflow用eager execution来实时评估操作,==返回具体值而不是建立一个稍后执行的计算图。
如果您习惯用REPL或python交互控制台,对此您会感觉得心应手。

由于此函数为训练模型生成数据,默认行为是对数据集进行随机处理(shuffle = True, shuffle_buffer_size = 10000),并且无限期重复数据集(num_epochs = None),我们还设置了batch_size参数。

模型是指特征和标签之间的关系

您是否在不适用机器学习的情况下确定四个特征和鸢尾花品种之间的关系?也就是说,您是否使用传统编程技巧(例如大量条件语句)创建模型?
也许能,前提是反复分析该数据集,并能最终确定花瓣和花萼测量值和特定品种的关系

tf.keras.Sequential模型时层的线性堆叠。
该模型的构造函数会采用一系列层实例:在本例中,采用2个密集层(各包含10个节点),以及一个输出层(包含3个代表标签预测的节点。第一个层的input_shape参数对应该数据集中的特征数量,它是一项必须参数)

tf.keras.layers.Dense输出的是一个对数,然后对数通常变成softmax函数的输入

=如果你从训练数据集中获得了过多的信息,预测便会仅适用于模型坚果的数据,但是无法泛化。此问题称之为过拟合–就好比将答案死记硬背下来,而不去理解问题的解决方式。

有监督学习:模型通过包含标签的样本加以训练
无监督学习:样本不包含标签。相反,模型通常会在特征中发现一些规律
在训练和评估阶段,我们都需要计算模型的损失。这样可以衡量模型的预测结果与预期标签有多大的偏差,也就是说,模型的效果有多差。我们希望尽可能减小或优化这个值。

model在没有开始训练的时候,也会返回值的。只不过这个结果并不理想

优化器会将计算出的梯度用于模型的变量,以使loss函数最小化。您可以将损失函数想象为一个曲面,我们希望通过导出走动找到该曲面的最低点。

梯度指向最高速上升的方向,因此我们将沿相反方向向下移动,我们以迭代的方式计算每个批次的损失和梯度,以在训练过程中调整模型。模型会逐渐找到权重和偏差的最佳组合,从而将损失降至最低。损失越低,模型的预测效果就越好。

训练循环

1.迭代每个周期。通过一次数据集即为一个周期
2.在一个周期中,遍历训练Dataset中的每个样本,并获取样本的特征(x)和标签(y)
3.根据样本的特征进行预测,并比较预测结果和标签。衡量预测结果的不准确性。并使用所得的值计算模型的损失和梯度。
4.使用optimizer更新模型的变量。
5.跟踪一些统计信息已进行可视化####
6.对每个周期重复执行以上步骤。
num_epochs变量是遍历数据集集合的次数。
与直觉恰恰相反的是,训练模型的时间悦城,并不能保证模型就越好。
num_epochs是一个可以调整的超参数。选择正确的次数通常需要一定的经验和实验基础。

评估指的是确定模型做出预测的效果。要确定模型在鸢尾花分裂方面的效果,请将一些花萼和花瓣测量值传递给模型,并要求模型预测他们所代表的的鸢尾花品种。然后将模型的预测结果与实际标签进行比较。例如模型对一半输入样本的品种预测正确,则准确率为0.5,。

建立测试数据集
评估模型与训练模型相似。
最大的区别在于,样本来自一个单独的测试集,而不是训练集
为了公正地评估模型的效果,用于评估模型的样本务必于用于训练模型的样本不同
测试Dataset的建立与训练Dataset相似。下载CsV文本文件并解析相应的值,然后对数据稍加随机化处理。

与训练阶段不同,模型仅评估测试数据一个周期。在一下代码单元格中,我们会遍历测试集中的每个样本,然后将模型的预测结果与实际标签进行比较。这是为了衡量模型在整个测试集中的准确率

我们已经训练了一个模型并“证明”它是有效的,但在对鸢尾花品种进行分类方面,这还不够。现在,我们使用经过训练的模型对无标签样本(即包含特征但不包含标签的样本)进行一些预测。

在现实生活中,无标签样本可能来自很多不同的来源,包括应用,CSV文件和数据Feed

你可能感兴趣的:(#,tensorflow)