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