Это потому, что K.sum()
(K.reshape()
на самом деле тоже не нужен).
Все остальные тензоры (input_p
, cont_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)