首页 > 解决方案 > 有没有一种方法可以在不使用 __iter__() 的情况下从 Tensorflow MapDataset 中获取元素?

问题描述

我目前正在关注 Tensorflow 的时间序列预测教程,可以在此处找到。该类WindowGenerator提供了一个example(self)返回输入和标签示例的函数。但是,此功能需要使用__iter__(),当禁用急切执行时不支持该功能(我出于其他目的这样做了)。self.train有没有一种方法可以在不使用的情况下获取元素__iter__()

这是该课程的摘录:

class WindowGenerator():
    def __init__(self, input_width, label_width, shift,
                 train_df=train_df, val_df=val_df, test_df=test_df,
                 label_columns=None):
        # Store the raw data.
        self.train_df = train_df
        self.val_df = val_df
        self.test_df = test_df
        .
        .
        .
    .
    .
    .

    def make_dataset(self, data):
        data = np.array(data, dtype=np.float32)
        ds = tf.keras.preprocessing.timeseries_dataset_from_array(
            data=data,
            targets=None,
            sequence_length=self.total_window_size,
            sequence_stride=1,
            shuffle=True,
            batch_size=16,)

        ds = ds.map(self.split_window)

        return ds

    @property
    def train(self):
        return self.make_dataset(self.train_df)

    @property
    def val(self):
        return self.make_dataset(self.val_df)

    @property
    def test(self):
        return self.make_dataset(self.test_df)

    @property
    def example(self):
        """Get and cache an example batch of `inputs, labels` for plotting."""
        result = getattr(self, '_example', None)
        if result is None:
            # No example batch was found, so get one from the `.test` dataset
            result = next(iter(self.test))
            # And cache it for next time
            self._example = result
        return result

标签: pythontensorflow

解决方案


推荐阅读