将不同大小的输入数据输入神经网络的好方法?(张量流)



我的数据看起来像这样。它们是浮点数,它们在一个大的 numpy 数组中 [700000,3]。没有空字段。

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

这个想法是输入一组值 1 和值 2,并让它使用分类来识别标签。

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

有没有一种不复杂的方法来以这种方式馈送数据?(即列标签等于 1 的进料批次(

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

由于您的数据位于 numpy 数组中(我们称之为data,您可以使用

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

它将每行的第零个元素与数字(在本例中为1.(进行比较,并仅选择具有标签的行1..从这些行中,它采用第一个和第二个元素,即值 1 和值 2。下面是一个工作示例。您可以使用 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)

理想情况下使用 TFRecords 格式。

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

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

相关内容

最新更新