连接特征总和 - 形状误差

时间:2018-06-08 12:49:19

标签: tensorflow keras tensor

我在Keras有一个模型,我想明确地让神经网络看几个特征的总和。我试着这样做:

sum_input_p = Lambda(sumFunc)(input_p)
d_input = keras.layers.concatenate(
    [input_p, cont_cond, sum_input_p, one_hot_cond_1, one_hot_cond_2 ], axis=-1)

其中

def sumFunc(x):
   return K.reshape(K.sum(x), [1])

但是我收到了一个错误:

  

ValueError:Concatenate图层需要具有匹配形状的输入   除了连续轴。得到输入形状:[(无,267),(无,   1),(1,),(None,4),(None,2)]

这是因为reshape中的sumFunc步吗?我怎样才能正确地重塑它,以便它可以与神经网络中的其他功能连接起来?

1 个答案:

答案 0 :(得分:2)

这是因为K.sum()K.reshape()并非真的需要。)

所有其他张量(input_pcont_cond等)仍然包含我假设的批量样本(即它们的形状为(batch_size, num_features),而batch_size = None仅为sum_input_p在运行图表时定义)。因此,您可能希望(batch_size, 1)具有形状x,即计算输入张量import keras import keras.backend as K from keras.layers import Input, Lambda import numpy as np def sumFunc(x): x_axes = np.arange(0, len(x.get_shape().as_list())) # ... or simply x_axes = [0, 1] in your case, since the shape of x is known y = K.sum(x, axis=x_axes[1:]) # y of shape (batch_size,) y = K.expand_dims(y, -1) # y of shape (batch_size, 1) return y input_p = Input(shape=(267,)) sum_input_p = Lambda(sumFunc)(input_p) print(sum_input_p) # > Tensor("lambda_1/ExpandDims:0", shape=(?, 1), dtype=float32) d_input = keras.layers.concatenate([input_p, sum_input_p], axis=-1) print(d_input) # > Tensor("concatenate_1/concat:0", shape=(?, 268), dtype=float32) 的所有维度的总和,但第一维度(对应于批量大小)除外。“ p>

cherry-pick