实现列车功能的tensorflow通用模型抽象
gtrain的Python项目详细描述
gtrain
在开始使用此软件包之前,请阅读自述文件中标题用法的一部分
使用模型和数据的抽象来定义可用于学习的结构的项目。利用gtrain函数学习模型,使之与数据拟合良好。我所说的模型,是指可以用张量流表示的任意神经网络或其他结构。
这种抽象允许实现几乎所有您想要的东西,而无需一直重新实现学习算法。
例如,它可以轻松地处理其他实现中不常见的各种输入长度。
然而,有必要在tensorflow框架中从头定义模型。另一方面,当您想使用一些不常见的体系结构时,这个过程是不可避免的。
用法
下面,介绍函数gtrain和stran使用的关键概念。一些
模型和数据描述必须由其子类重写的类的方法。
最后,算法描述显示了函数如何操作和使用它们的一些参数。
型号
build()在tensorflow中创建模型表示的方法。它还存储由模型的其他方法返回的一些占位符。
get_loss()返回丢失函数的占位符。
get_placeholders()返回输入和输出的占位符列表。
训练结束(训练)在训练结束后执行,训练中进行了TRE训练。
name()返回给定对象的特定名称。
以下方法特定于分类任务,因此在其他情况下,它们可以实现为一些虚拟函数,例如,始终返回1。
get_hits()返回若干正确分类样本的占位符。
get_counts()返回传递到模型中的多个样本的占位符。
如果您熟悉TensorFlow Sumarries,则函数Get_Train_Summaries()和Get_Dev_Summaries允许您将摘要分别添加到培训和验证步骤中。
数据
设置占位符(占位符列表)它由方法模型的输出调用。在开始训练之前获取占位符。
训练结束后执行。在训练结束后执行。
在验证阶段,它返回一个生成器,返回tf.session.run函数的提要字典。每个字典都应该为以前获得的每个占位符指定一个值。
get_batches()类似于get_dev_batches,但处于培训阶段。
gtrain-算法描述
下面,我们将简要介绍gtrain函数。本说明旨在了解gtrain函数的同步性,以及模型和数据的子代与参数num-steps和evaluate-every之间的关系。
为简单起见,**
def gtrain(model, data, num_steps, evaluate_every):
model.build() # build model in newly created TF session
data.set_placeholders(model.get_placeholders())
for training_step in range(num_steps):
# train step
for feed_dict in data.get_batches():
***Accumulate gradients, loss, and accuracy***
***Apply gradients to the model by selected optimizer***
if training_step % evaluate_every == 0:
# evaluation step
for feed_dict in data.get_dev_batches():
***Accumulate loss and accuracy***
***Log validation loss and accuracy***
if ***Loss increses***:
***Increment fails counter***
data.train_ended()
model.train_ended(***current session***)
累加过程有助于满足大型数据集的内存需求。此外,它还允许应用可变输入大小。在这种情况下,get batches函数返回具有不同大小的批的一部分。
请注意,参数num_steps
指的是optimizeri应用的总和,即权重更改的次数。因此,如果数据包含批计数
批,则具有epoch
epoch的训练算法具有步数=100*批计数*epoch
和求值每个=批计数*epoch
。
应变-算法描述
def strain(model, data, num_steps, session=None):
if session is not None:
session = tf.Session()
with session.as_default()
model.build()
session.run(tf.global_variable_initializer())
data.set_placeholders(model.get_placeholders())
for _ in range(num_steps):
for feed_dict in data.get_batches():
***Applie gradients with respect to data in feed_dict***
data.train_ended()
model.train_ended(session)
return session
示例
有模型的子类的实现示例:
fcnet是多层感知器的表示。
textcnn是文本分类的卷积神经网络。一种类型的体系结构:卷积,覆盖所有最大池,附加的完全连接层。
还有数据子类的实现:
所有数据其中每次对所有训练样本计算梯度。
批处理数据其中对指定大小的训练样本子集分别进行梯度应用。
gtrain函数的应用程序示例包含在github存储库的文件夹example中。
文件random_data_fc_net.py中使用了人工数据集。由于使用了数据的alldata子类,因此将对整个数据计算梯度。应用多层感知器(mlp)的体系结构为2-3-3。通过设置,将mlp设置为使用mse作为损失函数
第二个示例位于文件mnist_batch_data_fc_net.py中。本例应用的数据批次大小为32,应用nn的体系结构为784-30-20-10。
模块实用程序
模块utils提供了一些在分类任务中应用尝试过程时很方便的函数。 以下列表提供了所包含功能的简短说明,有关更多信息,请参阅文档。
获取"损失"和"精度"-重新获取在训练期间计算并保存为TensorFlow摘要的"损失"和"精度"度量
confmat-计算给定两个标签在一个热编码表示或纯整数标签中的混淆矩阵
精度-与confmat类似,但它计算精度。
labels2概率-将整数标签列表转换为一个热编码表示形式。
保存权重-保存numpy数组列表
加载权重-加载通过保存权重保存的numpy数组列表
检查目录-如果不存在,则创建整个目录路径
连接权重和偏差-将两个numpy数组列表合并为一个。
获取类与其他类的索引-生成给定样本的索引,其中包含来自给定类和所有其他类的具有相同数字的样本。
模块状态
对分类器进行严格的统计比较是一项复杂的任务,因为如果存在两个以上的分类器,则会同时检验多个假设。 Janez Dem_ar于2006年发表了一篇题为"多数据集上分类器的统计比较"的文章,描述了统计测试的性能过程。函数compere_classifiers复制本文中描述的过程。
警告:此模块需要imoprtscipy.stats
警告:如果需要在统计表中查找和输入特定值,则函数compere_分类器可能需要用户输入
函数的用法示例显示在存储库示例目录中的文件compere_classifiers.py中。