首页 > 解决方案 > 使用for循环在keras中实现时间相关的神经网络

问题描述

我在 keras 中有一个循环模型,它明确地实现了 for-loop over 序列。见下面的模型[编辑]

我有一个大小为 [samples~1M x time ~1k) 的大矩阵输入,我需要使用相同的模型,该模型将那个时间邻居的一部分作为输入 ~ (-5,+5)。

那个写法好像:

  1. 就 Keras 的使用而言,非自然
  2. for-loop 可能效率低下,而且很难说出原因。

问题是:我应该并且可以用 keras 层中更内置的东西替换模型中 for-loop 的使用吗?这对速度也有帮助吗?

如果是这样,那将如何完成,TimeDistributed keras 模型是正确的方法吗?无法弄清楚如何使用该模型获取运行时间段。

谢谢

def my_model(signal_length = 1000 ,pre = 5 ,post = 5, num_classes=4):

    # Define the input 
    X = Input(shape=(signal_length,))
    # output as a list of size (slightly less) as X
    outputs = []
    # sliding window on X, considering each segment as input
    for t in range(pre,signal_length-post):

    # per time unit consider the input signal of the neighboring ~10 signals:

        p1 = t - pre
        p2 = t + post
        Xt = Lambda(lambda x: X[:,p1:p2])(X)

    # Connect to network:
        Xt = Dense(20, activation='relu')(Xt)
        Xt = Dense(20, activation='relu')(Xt)
        Xt = Dense(num_classes, activation='softmax')(Xt)

    #output per unit time in a list:
        outputs.append(Xt)

    model = Model(inputs=X, outputs=outputs)
    mode.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])        

    return model

标签: pythonkeraslstmrnn

解决方案


推荐阅读