代码之家  ›  专栏  ›  技术社区  ›  TheEnigmist

为TensorFlow v2创建时间序列数据集

  •  0
  • TheEnigmist  · 技术社区  · 4 年前

    我正试图用csv中的数据给CNN+LSTM模型提供数据。我缺少的是设置一个正确的数据集来开始训练我的模型。

    这是我的测试模型:

    def test_model():
        model = models.Sequential()
        model.add(TimeDistributed(Conv1D(32, 4, strides=1, activation='relu', padding="valid"), input_shape=[None, 6, 20]))
        model.add(TimeDistributed(MaxPooling1D(pool_size=2), input_shape=[None, 6, 20]))
        model.add(TimeDistributed(Conv1D(64, 4, strides=1, activation='relu', padding="valid"), input_shape=[None, 6, 20]))
        model.add(TimeDistributed(MaxPooling1D(pool_size=2), input_shape=[None, 6, 20]))
        model.add(TimeDistributed(Flatten(), input_shape=[None, 6, 20]))
        model.add(LSTM(100, activation='relu'))
        model.add(Dropout(0.2))
        model.add(Dense(100, activation="relu"))
        model.add(Dropout(0.4))
        model.add(Dense(5, activation="softmax"))
        model.compile(optimizer=keras.optimizers.Adam(1e-3), loss="binary_crossentropy", metrics=["accuracy"])
        return model
    

    您可以在此处下载 test.csv

    CSV数据集由6个特征+1个多标签组成。我需要每20行创建一个时间序列,所以我认为我的形状应该是[None,6,20],按时间戳值升序排列。

    我是TensorFlow的新手,我不知道如何从头开始创建合适的数据集,我能够从包含图像的目录(用于CNN)加载数据集,但在这种情况下,我真的不知道该怎么做。

    这是我试图生成数据集的内容:

    with open('test.csv') as csvfile:
        dataset = list()
        reader = csv.reader(csvfile, delimiter=',')
        next(reader)
        count = 0
        timeseries = list()
        labels = list()
        for row in reader:
            count = count + 1
            if count <= 20:
                timeseries.append(
                    [float(row[0]), float(row[1]), float(row[2]), float(row[3]), float(row[4]), float(row[5])])
            else:
                dataset.append(timeseries)
                labels.append(int(row[6].split("L")[-1]))
                timeseries = list()
                count = 0
    

    之后,我将其转换为tf.DataSet,如下所示:

    dataset = tf.data.Dataset.from_tensor_slices(dataset)
    labels = tf.data.Dataset.from_tensor_slices(labels)
    

    在这里,我得到了一个 <TensorSliceDataset shapes: (20, 6), types: tf.float32> 如我所愿。然后我用它喂了一只K-Fold:

    estimator = KerasClassifier(build_fn=test_model, epochs=60, batch_size=5, verbose=0)
    kfold = KFold(n_splits=10, shuffle=True)
    results = cross_val_score(estimator, dataset, labels, cv=kfold)
    

    运行cross_val_score时,我收到了以下错误:

    TypeError:Singleton数组(<TensorSliceDataset形状:(20,6),类型:tf.folat32>,dtype=object)不能被视为有效集合。

    我错过了什么?

    0 回复  |  直到 4 年前