Keras中Conv1D的input_shape中每个元素的含义是什么?

数据挖掘 神经网络 时间序列 美国有线电视新闻网
2022-01-24 19:02:19

我有 3 个类的时间序列数据(每个类为 35 秒),因为我每 1 秒提取 95 个特征,因此我的最终数据具有形状(105,95)(时间行和特征列)。

我目前正在为分类 3 类构建 1D-CNN 模型。但我被困在 Conv1D 的第一层。我了解到 Convd1D 的 input_shape 是 (batch_size, new_step, input_dim) 但老实说我不知道​​每个元素的确切含义以及如何将输入数据修改(重塑)为 Conv1D 图层形状?

还有一个问题,我知道 CNN 需要固定的输入大小。但是我将数据拆分为训练数据和验证数据,因为 k 参数 = 5,这意味着我的数据将变为:训练 = (84,95) 和验证 = (21,95)。那么使用相同的模型,我们如何训练和验证不同大小的数据呢?

我刚开始学习CNN,但还不知道Conv1D是如何运作的?

我很感激你的帮助。

非常感谢你。

听到是我的代码(由于第一个 Conv1D input_shape 仍然会出错):

X = dataset[:, 0:95].astype(float)
Y = dataset[:, 95].astype(int)


# Encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoder_Y = encoder.transform(Y)

y = np_utils.to_categorical(encoder_Y)


acc_per_fold = []
loss_per_fold = []

fold_no = 1

kfold = KFold(n_splits = 5, shuffle = True)
for train, test in kfold.split(X,y):

    model = Sequential()
    model.add(Conv1D(100, 3, activation = 'relu', input_shape = (I really dont know what to put in here??))
    model.add(Conv1D(100, 3, activation = 'relu'))
    model.add(MaxPooling1D(3))
    model.add(Conv1D(150, 3, activation = 'relu'))
    model.add(Conv1D(150, 3, activation = 'relu'))
    model.add(GlobalAveragePooling1D())
    model.add(Dense(3, activation = 'softmax'))

    model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

    #model.summary()

    print('------------------------------------------------------------------------------')
    print(f'Training for {fold_no}...')

    history = model.fit(X[train], y[train], batch_size = 7, epochs = 150, verbose = 1)

    scores = model.evaluate(X[test], y[test], verbose = 0)
    print(f'Score for fold {fold_no}: {model.metrics_names[0]} of {scores[0]}; {model.metrics_names[1]} of {scores[1]*100}%')
    acc_per_fold.append(scores[1] * 100)
    loss_per_fold.append(scores[0])

    # Increase fold number
    fold_no = fold_no + 1
1个回答

X[train].shape[0] - 这是实例的数量。假设它是 M
X[train].shape[1] - 这是每个实例的形状。每个实例是 (1 x N)

由于输入实例是一维的,因此输入数据变为 mx N。
如果它是二维的,它将是 mx N x x N y

还有一个问题,我知道 CNN 需要固定的输入大小。但是我将数据拆分为训练数据和验证数据,因为 k 参数 = 5,这意味着我的数据将变为:训练 = (84,95) 和验证 = (21,95)。因此,使用相同的模型,我们如何训练和验证不同大小的数据

大小是指每个实例的大小,在这种情况下是相同的,即 (1,95)。只是实例的数量不同,即测试中的 21 个和训练中的 84 个。


TimeSeries 数据 -
在 TS 学习中,我们的初始数据只是单个数据点的基于时间的序列。然后,我们通过使用某个点(例如 M)作为 Feature 并将 (M+1)th 作为 Target 来使其成为 Feature 和 Target。M 是根据 TS 特性来识别的。
例如
1,2,3,4,5 将是(如果我使用 2 功能)
1,2(X) --> 3(Y)
2,3(X) --> 4(Y)
3,4(X ) --> 5(Y) 等。

这些是 3 条火车记录。

也可以阅读这篇文章 - Machinelearningmastery