Tensorflow 如何并行化自定义lstm(4d输入)

Tensorflow 如何并行化自定义lstm(4d输入),tensorflow,keras,lstm,summarize,Tensorflow,Keras,Lstm,Summarize,排列层后,尺寸变为(无、无、12、16) 我想用一个LSTM(48个单位)和输入_形状(12,16)来总结最后两个维度 使总体尺寸变为(无,无,48) 目前,我有一个自定义lstm和lstmcell的解决方案,但是它的速度非常慢,因为我在单元格中使用了另一个lstm,等等 我想要的是: (None, None, 12, 16) (None, None, 48) (None, None, 60) 最后两个是在自定义lstm中完成的(目前),有没有办法将它们分开 这样做的正确方法是什么? 我们可以

排列层后,尺寸变为(无、无、12、16) 我想用一个LSTM(48个单位)和输入_形状(12,16)来总结最后两个维度 使总体尺寸变为(无,无,48)

目前,我有一个自定义lstm和lstmcell的解决方案,但是它的速度非常慢,因为我在单元格中使用了另一个lstm,等等

我想要的是:

(None, None, 12, 16)
(None, None, 48)
(None, None, 60)
最后两个是在自定义lstm中完成的(目前),有没有办法将它们分开

这样做的正确方法是什么? 我们可以为具有相同权重但不同单元状态的单元创建不同(或多个)lstm吗? 你能告诉我一些方向吗

输入(输入层)(无、36、无、1)0


convlayer(Conv2D)(无,36,无,16)160个输入[0][0]


mp(MaxPoolig2D)(无、12、无、16)0 convlayer[0][0]


排列1(排列)(无、无、12、16)0 mp[0][0]


重塑_1(重塑)(无,无,192)0排列_1[0][0]


自定义\u lstm\u扩展\u 1(自定义(无,无,60)26160重塑\u 1[0][0]

自定义LSTM的名称如下所示: CustomLSTMExtended(单位=60,摘要单位=48,返回序列=True,返回状态=False,输入形状=(无,192))(内部)


我已经使用tf.reforme而不是keras reforme层完成了这项工作。 Keras重塑层不希望您干扰“批量大小”尺寸

shape = Lambda(lambda x: tf.shape(x), output_shape=(4,))(inner)
..
..
inner = Lambda(lambda x : customreshape(x), output_shape=(None, 48))([inner, shape])
..
def customreshape(inputs):
    inner = inputs[0]
    shape = inputs[1]
    import tensorflow as tf2 
    reshaped = tf2.reshape(inner, [shape[0], shape[1], 48] )
    return reshaped
Cell class:
def call(self, inputs, states, training=None):
        #cell
        reshaped = Reshape([12, 16])(inputs)
        state_h = self.summarizeLayer(reshaped)
        inputsx = state_h[0]
        return super(SummarizeLSTMCellExtended, self).call(inputsx, states, training)
shape = Lambda(lambda x: tf.shape(x), output_shape=(4,))(inner)
..
..
inner = Lambda(lambda x : customreshape(x), output_shape=(None, 48))([inner, shape])
..
def customreshape(inputs):
    inner = inputs[0]
    shape = inputs[1]
    import tensorflow as tf2 
    reshaped = tf2.reshape(inner, [shape[0], shape[1], 48] )
    return reshaped