【问题标题】:Good way to feed input data of different sizes into neural network? (Tensorflow)将不同大小的输入数据输入神经网络的好方法? (张量流)
【发布时间】:2017-08-05 14:48:06
【问题描述】:

我的数据如下所示。它们是浮点数,它们位于一个大的 numpy 数组 [700000,3] 中。没有空字段。

Label   | Values1   | Values2
1.      | 0.01      | 0.01
1.      | ...       | ...
1.      |
2.      |
2.      |
3.      |
...

这个想法是输入一组 values1 和 values2 并让它使用分类来识别标签。

但我不想逐行输入数据,而是输入所有属于标签 1 的值 1/2 作为一个集合(例如,输入前 3 行应该返回 [1,0,... ],将接下来的 2 行作为一组输入 [0,1,...])

有没有一种以这种方式提供数据的简单方法? (即列标签等于 1 的进料批次)

我目前正在对数据进行排序并考虑使用指向开始的指针并使用循环检查下一行是否等于当前行以找到指向集合末尾的指针并获取该批次的行数.但这或多或少地阻止了输入顺序的随机化。

【问题讨论】:

    标签: python arrays numpy tensorflow neural-network


    【解决方案1】:

    由于您将数据保存在一个 numpy 数组中(我们称之为 data,您可以使用

    single_digit = data[(data[:,0] == 1.)][: , 1:]
    

    它将每行的第零个元素与数字(在本例中为1.)进行比较,并仅选择标签为1. 的行。从这些行中,它获取第一个和第二个元素,即 Values1 和 Values2。下面是一个工作示例。您可以使用 for 循环遍历数据集中包含的所有标签,并使用

    为每个标签构造一个 numpy 数组
    single_digit = data[(data[:,0] == label_of_this_iteration)][: , 1:]
    

    然后将这些数组提供给网络。在 TensorFlow 中,如果您不指定相应占位符的第一个维度,您可以轻松地提供不同长度的批次。

    import numpy as np
    # Generate some data with three columns (label, Values1, Values2)
    n = 20
    ints = np.random.randint(1,6,(n, 1))
    dous = np.random.uniform(size=(n,2))
    data = np.hstack((ints, dous))
    print(data)
    
    # Extract the second and third columns of all rows having the label 1.0
    ones = data[(data[:,0] == 1.)][: , 1:]
    print(ones)
    

    【讨论】:

      【解决方案2】:

      最好使用 TFRecords 格式。

      这种方法可以更轻松地混合和匹配数据集和网络架构

      这里是一个链接,详细了解这个类似 json 的结构是什么样子的 example.proto

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-03
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 2021-04-05
        • 1970-01-01
        • 2016-10-21
        • 1970-01-01
        相关资源
        最近更新 更多