如何在不同列具有不同类型的地方存储数据集?

时间:2019-04-12 20:50:58

标签: c++ hdf5

假设我有一个包含不同列的表。这些列具有不同的类型。例如:

col1,   col2,   col3
1.1    "hello"   1
2.2    "world"   2
...

此处col1floatdoublecol2string,而col3int。 现在,我想使用C ++将这些数据存储在hdf5文件中。我该怎么办?

我已经找到this post,并且对Python有相同的问题。但是我无法弄清楚如何在C ++中执行此操作,因为据我发现,您必须为整个数据集指定类型。

修改: 有没有一种方法可以让一列包含数组,比方说整数数组?例如:

col1,   col2,   col3,   col4
1.1    "hello"   1     {1, 3}
2.2    "world"   2     {1, 2, 3}
...

1 个答案:

答案 0 :(得分:0)

请查看HDFql,因为它可以减轻处理HDF5复合数据集的低级详细信息。在C ++中使用HDFql,您的问题可以通过以下方式解决:

import tensorflow as tf
import tensorflow_addons as tfa

optimizer = tfa.optimizers.MovingAverage(Adam(learning_rate=5e-5))
loss_obj = tf.keras.losses.CategoricalCrossentropy()

@tf.function
def train_step(inputs, outputs):

    with tf.GradientTape() as tape:
        start, end = model([inputs[0], inputs[1], inputs[2]], training=True)
        start_truth, end_truth = tf.squeeze(outputs[0]), tf.squeeze(outputs[1])
        start_loss = loss_obj(start_truth, start)
        end_loss = loss_obj(end_truth, end)
        total_loss = start_loss + end_loss

    model_gradients = tape.gradient(total_loss, model.trainable_variables)
    optimizer.apply_gradients(zip(model_gradients, model.trainable_variables))

    del tape
    return total_loss, start_loss, end_loss

(可选)您可以使数据集在其第一维上可扩展(通过声明其大小不受限制),然后写一行,以一个单位扩展维,写另一行,以一个单位扩展维,依此类推...

可以在reference manual中找到有关如何使用HDFql的其他详细信息和示例。