0

我的任务是指导一组潜在的大量元素来训练神经网络。我正在尝试使用 tf.data.experimental.CsvDataset 和 tf.data.experimental.make_csv_dataset 但我一直卡住。

我的数据集是一个文本文件,其中包含用“;”分隔的数字字符串。这是它的外观:

14;14;14;55;55;20;20...33;34;34
20;20;20;15;15;15;26...10;10;10
....
10;10;10;30;30;35;35...23;23;23

每行包含 2500 个数字,彼此分开。我尝试使用此代码

dataset = tf.data.experimental.CsvDataset(pathAsk,
                                          record_defaults=[tf.float32],
                                          field_delim=";",
                                          na_value='NA'
                                          )

for element in dataset.as_numpy_iterator():
  print(element)

但是我得到一个错误,比如行中的元素比我在 record_defaults 中指定的要多。我也尝试使用这个:

dataset = tf.data.experimental.make_csv_dataset(pathAsk, batch_size=2, field_delim=';')
iterator = dataset.as_numpy_iterator()
print(dict(next(iterator)))

但我得到错误:

Cannot have duplicate column names.

我的任务是使用这个数据集,以便它可以进入以类似方式构建的神经网络的输入:

inputs = keras.Input(shape=(2500), name="ask")
x = keras.layers.Embedding(1000, 64)
x = keras.layers.Dense(64, activation=keras.activations.relu)(inputs)
x = keras.layers.Dense(32, activation=keras.activations.relu)(x)
outputs = keras.layers.Dense(6, activation=keras.activations.relu)(x)

model = keras.Model(inputs, outputs)
model.compile("adam", "binary_crossentropy", metrics=["accuracy"])
4

1 回答 1

0

看起来我找到了我的问题的答案。我在 record_defaults 属性中添加了行的维数指示。

datasetAsk = tf.data.experimental.CsvDataset(
    pathAsk,
    record_defaults = [tf.constant(0, dtype=tf.float32)] * 2500,
    header = False,
    field_delim = ";",
    )

结果,一行中的元素数量对应于数据类型 dtype 的数量,并且迭代操作顺利通过。

于 2021-07-02T05:21:13.740 回答