Tensorflow 在keras中重塑张量的最佳方法是什么

Tensorflow 在keras中重塑张量的最佳方法是什么,tensorflow,keras,reshape,Tensorflow,Keras,Reshape,我有一个conv网络,它输出一个张量w/shape28397256。我想重新构造它,创建一个28*256397的张量,同时保留397轴的顺序,这是一个时间维度。重塑后,我想将其馈送到模型中的另一层 Keras的重塑层没有保持秩序。我在想我可以把conv网络的输出张量手动拼接成一个新的张量,但我不知道如何将该张量输入回模型的下一层。非常感谢你的帮助,我对keras不熟悉 以下是我最初尝试的: conv = Conv2D(hidden_units, kernel_size, strides=(1,1

我有一个conv网络,它输出一个张量w/shape28397256。我想重新构造它,创建一个28*256397的张量,同时保留397轴的顺序,这是一个时间维度。重塑后,我想将其馈送到模型中的另一层

Keras的重塑层没有保持秩序。我在想我可以把conv网络的输出张量手动拼接成一个新的张量,但我不知道如何将该张量输入回模型的下一层。非常感谢你的帮助,我对keras不熟悉

以下是我最初尝试的:

conv = Conv2D(hidden_units, kernel_size, strides=(1,1), activation=conv_activation)
model.add(conv)
conv_output = MaxPooling2D(pool_size=pool_kernel)
model.add(conv_output)

### STACKING ###
shape = conv_output.output.shape
F_prime = shape[1].value
T = shape[2].value
M = shape[3].value

reshaped = core.Reshape((T, F_prime*M), input_shape=shape[1:])
model.add(reshaped)

recurr = LSTM(hidden_units, return_sequences=True, activation=recurr_activation, recurrent_activation='hard_sigmoid', dropout=0.3, recurrent_dropout=0.0)
model.add(recurr)
您可以使用tf.concat或np.concatenate中的concatenate。在您的情况下,您希望合并轴0和轴1,以便可以执行tf.concattensor,轴=0

您也可以使用tf.reformateSensor,28*256,397。注意前后尺寸的元素数量必须相同


希望这有帮助

我知道我可以这样做,但是我如何将重塑的张量集成到模型层中呢?我可以使用:split=tf.splitconv_output.output,M,axis=3重塑=tf.squeezetf.concatsplit,axis=1,axis=-1实现重塑,其中conv_output.output是需要重塑的输出张量。但是,如何将其指定为下一层的输入?我想我可以重写tensorflow中的所有内容来避免这个问题,但理想情况下我希望使用Keras,您可以从Keras调用tf函数。从keras导入后端为K和K.concat…已解决-创建自定义keras层并使用后端操作