【问题标题】:Dealing with batch size and time step in 1D CNN处理 1D CNN 中的批量大小和时间步长
【发布时间】:2020-04-14 09:29:09
【问题描述】:

我有一个批处理生成器,它为我提供(500, 1, 12) 形状的数据(即对应于(batch size, time steps, features))。

def batch_generator(batch_size, gen_x,gen_y): 
    batch_features = np.zeros((batch_size,1, 12))
    batch_labels = np.zeros((batch_size,9))
    while True:
        for i in range(batch_size):
            batch_features[i] = next(gen_x)
            batch_labels[i] = next(gen_y)
        yield batch_features, batch_labels

def generate_X():
    while True:
        with open("/my_path/my_data.csv") as f:
            for line in f:
                currentline = line.rstrip('\n').split(",")
                currentline = np.asarray(currentline)
                currentline = currentline.reshape(1,1,12)
                yield currentline

def generate_y():
    while True:
        for i in range(len(y_train)):
            y= y_train[i]
            yield y

然后我尝试将其输入 1D-CNN:

model = Sequential()
model.add(Conv1D(filters=100, kernel_size=1, activation='relu', input_shape=(1,12), data_format="channels_last"))

但现在我无法使用大于 1 的内核大小(即kernel_size = 1)。这可能是因为我的时间步长等于 1。

如何使用整个批量大小作为 1D-CNN 的输入并增加 kernel_size

【问题讨论】:

    标签: python machine-learning keras conv-neural-network generator


    【解决方案1】:

    请注意,当我们的每个输入样本都是一个序列(即值的顺序很重要/指定的数据,例如一周内的股市值或一段时间内的天气温度值)时,会使用一维卷积一个月或一系列基因组或单词。话虽如此,考虑到您的数据,存在三种不同的情况:

    • 如果 csv 文件中的每一行都是长度为 12 的序列,那么您正在处理形状为 (12,1) 的样本,即在每个样本中有 12 个时间步,每个时间步仅具有特征。所以你应该相应地重塑它(即(12,1)而不是(1,12))。

    • 但是,如果每一行本身不是一个序列,而是一组连续的行形成一个序列,那么您必须相应地生成数据:每个样本将由多个连续的行组成,例如如果我们认为时间步数为 10,那么第 1 到第 10 行将是一个样本,第 2 到第 12 行将是另一个样本,依此类推。在这种情况下,每个样本的形状都是(number_of_timesteps, 12)(在我提到的示例中,它是(10,12))。现在您可以通过编写自定义函数来创建和生成这些示例,或者您可以将所有数据加载为 numpy 数组,然后使用TimeseriesGenerator 为您完成。

    • 如果上述两种情况均不适用,那么您的数据很可能根本不是序列数据,因此使用 1D-CNN(或任何其他序列处理模型,如 RNN)对此没有意义数据。相反,您应该使用其他合适的架构。

    【讨论】:

      猜你喜欢
      • 2016-07-14
      • 2017-11-06
      • 1970-01-01
      • 2017-11-27
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多