首页 > 解决方案 > 从多维数组到 Keras 中的其他形状

问题描述

我有 4 个带有 shape 的输入(batch_train, 128, 30000)。我想将所有 4 个输入的 softmax 层作为输出。这是我的代码:

inp1.shape = (batch_train, 128, 30000)
inp2.shape = (batch_train, 128, 30000)
inp3.shape = (batch_train, 128, 30000)
inp4.shape = (batch_train, 128, 30000)


conc = tf.keras.layers.Concatenate(axis=0)([inp1[tf.newaxis], inp2[tf.newaxis], inp3[tf.newaxis], inp4[tf.newaxis]])
dense = tf.keras.layers.Dense(num_x)(concat)
drp= tf.keras.layers.Dropout(0.1)(dense)
output = tf.keras.layers.Dense(4)(drp)

但是,我的输出形状是(4, batch_train, 128, 30000, 4). 我想要的输出是(train_batch, 4). 我究竟做错了什么?

标签: pythontensorflowkeras

解决方案


我不确定您要在哪个轴上连接,但如果您想要一维输出,则必须展平您的张量:

import tensorflow as tf

inp1 = tf.keras.layers.Input((128, 5))
inp2 = tf.keras.layers.Input((128, 5))
inp3 = tf.keras.layers.Input((128, 5))
inp4 = tf.keras.layers.Input((128, 5))

conc = tf.keras.layers.Concatenate(axis=1)([inp1, inp2, inp3, inp4])
flatten = tf.keras.layers.Flatten()(conc)
dense = tf.keras.layers.Dense(100)(flatten)
drp= tf.keras.layers.Dropout(0.1)(dense)
output = tf.keras.layers.Dense(4)(drp)
model = tf.keras.Model([inp1, inp2, inp3, inp4], output)

batch_size = 5
inputs1, inputs2, inputs3, inputs4 = tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5))
print(model([inputs1, inputs2, inputs3, inputs4]).shape)
(5, 4)

但是,使用如此大的输入形状,您可能会遇到“内存不足”错误。


推荐阅读