【问题标题】:Reusing a Neural Network重用神经网络
【发布时间】:2016-12-23 03:33:29
【问题描述】:

我对神经网络非常陌生,但对于我的一个项目来说,它们似乎很合适。该应用程序最终应该在 Android 手机上运行。我的想法是使用 TenserFlow,但我不确定它是否合适。

我有以下情况,我的输入是一组图像(它们的顺序不应该对输出产生任何影响)。集合大小不是固定的,但在大多数情况下低于 10。我对整个集合的输出只是一个二进制分类(通过/失败)。

我将有一个卷积神经网络,它计算两个输出,一个权重和一个通过/失败值。每个图像单独提供给这个 CNN,然后使用加权算术平均值将结果值聚合为最终的通过/失败值。

我的问题是,我可以用 TensorFlow 训练这样的网络吗?

我的训练数据中没有 CNN 输出的值,只有聚合后的输出。这在一般情况下是否可以使用面向梯度的框架,或者我是否必须为此使用遗传算法方法。

【问题讨论】:

    标签: android neural-network tensorflow conv-neural-network


    【解决方案1】:

    你绝对可以用 tensorflow 做到这一点。完成介绍教程后,您应该查看CNN tutorial 以了解如何在 tensorflow 中实现卷积神经网络。 所有繁重的工作都已经处理好了。您所要做的就是使用 tf.nn.conv2d() 方法来制作卷积层,然后使用其中一种池化和归一化操作等等。 如果您不熟悉这意味着什么,您应该在上面read up,但简而言之,CNN 有三个独特的组件。卷积层通过图像扫描一个窗口,以寻找某些模式,并且其激活作为网格记录在输出中。学习降低数据的维度很重要,这就是池化层的作用;它获取卷积层的输出并减小其大小。归一化层对此进行归一化,因为归一化数据往往会改善学习。

    如果您只有聚合输出,那么您需要想办法为单个图像提供合理的代理输出。您可以做的一件事就是使用聚合输出作为集合中每个单独图像的标签,并使用梯度下降进行训练。

    【讨论】:

    • 找到合理的代理并不容易。我怀疑仅使用标签会起作用,因为有些图像与最终结果高度相关,而有些则几乎没有。我想我会阅读一些关于使用遗传算法来包围网络的方法,这可能更适合我的问题
    • 我不确定算法的选择是否是这里的问题。问题是最终输出应该是样本中每个图像输出的平均值,但您只有最终输出。基于此,无法知道哪个图像对结果的影响最大。但是,如果您有许多训练集,则可以根据某些类型的图像在通过的示例中更频繁,而某些图像的出现频率较低,开始推断这一点。
    • 如果你为每张图像分配其集合的平均输出作为标签,那么更重要的图像往往会有更高的标签,并且会被模型拾取。从贝叶斯的角度来看,这将是最自然的事情,因为这是您在数据中拥有的信息量。
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2017-02-19
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多