实现列车功能的tensorflow通用模型抽象

gtrain的Python项目详细描述


gtrain

在开始使用此软件包之前,请阅读自述文件中标题用法的一部分

使用模型和数据的抽象来定义可用于学习的结构的项目。利用gtrain函数学习模型,使之与数据拟合良好。我所说的模型,是指可以用张量流表示的任意神经网络或其他结构。

这种抽象允许实现几乎所有您想要的东西,而无需一直重新实现学习算法。

例如,它可以轻松地处理其他实现中不常见的各种输入长度。

然而,有必要在tensorflow框架中从头定义模型。另一方面,当您想使用一些不常见的体系结构时,这个过程是不可避免的。

用法

下面,介绍函数gtrainstran使用的关键概念。一些

模型和数据描述必须由其子类重写的类的方法。

最后,算法描述显示了函数如何操作和使用它们的一些参数。

型号

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-stepsevaluate-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应用的总和,即权重更改的次数。因此,如果数据包含批计数批,则具有epochepoch的训练算法具有步数=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中。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX:无法在GridPane内水平居中放置行单元格   java GAE flex Jersey Web服务返回404   java使用SLF4J,是否可以对错误/警告采取行动?   如何使用Java解析每个不同键和值的JSON对象?   java如何在azure服务总线中始终侦听队列并截获每条消息   java需要退出循环并修复打印顺序错误(基本计算器)   java在Kafka的哪个分区中有多少数据?   在Java中访问无顶级类的非顶级类的编译器构造   java如何从maven项目生成jar   java如何使用amazon资源名称(ARN)作为标识符来查找amazon资源?   java为什么我的程序忽略else语句   java如何控制JTable中的字体样式、颜色和大小?   java对命令使用多个类,命令不起作用?   树集中的java字母排序不起作用   java将变量作为正则表达式传递   java TestNG XML中的一组值   java什么时候应该重写Equals函数?   Java中通过SSL使用web服务的web服务   java LibGDX以不同的速度移动对象   java中“and”的正则表达式