【发布时间】:2020-10-11 07:24:52
【问题描述】:
我有两个预测模型;确定性和深度学习网络。我想整合这两个模型,其中确定性模型为预测提供基础,而深度学习则进行所需的调整。这是一个浮点输出的回归问题。
深度学习网络的最后一层是:
Dense(1, activation='linear',kernel_initializer=init) (previous_layer_output)
所以它的输出形状就是 (?, 1)。确定性模型的输出形状必须相同,我的合并层才能正常工作。
确定性模型采用形状为 (?, 10, 1) 的输入层,应取 10 个值中的最大值并以 (?, 1) 形状输出。
下面的代码需要 10 个切片并对其执行 Maximum() 运行良好。但是它看起来很麻烦,我认为这不是正确的做法。
#print(x_test_scaled.shape[1:]) = (10, 1)
Det_Guess1 = Lambda(lambda x: x[:,0], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess2 = Lambda(lambda x: x[:,1], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess3 = Lambda(lambda x: x[:,2], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess4 = Lambda(lambda x: x[:,3], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess5 = Lambda(lambda x: x[:,4], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess6 = Lambda(lambda x: x[:,5], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess7 = Lambda(lambda x: x[:,6], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess8 = Lambda(lambda x: x[:,7], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess9 = Lambda(lambda x: x[:,8], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess10 = Lambda(lambda x: x[:,9], input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
Det_Guess = Maximum()([Det_Guess1, Det_Guess2, Det_Guess3, Det_Guess4,
Det_Guess5, Det_Guess6, Det_Guess7, Det_Guess8,
Det_Guess9, Det_Guess10])
#print(Det_Guess.shape) = (?, 1)
下面更简单的 Lambda 函数看起来很简洁,但由于其输出是标量形状而无法工作;
def find_max(x):
K.max(x)
return K.max(x)
Det_Guess= Lambda(find_max, input_shape=x_test_scaled.shape[1:], output_shape=(1,)) (Input_Layer)
# print(Det_Guess.shape) = ()
我尝试重塑,为这个更简单的 lambda 函数添加维度,但无法保持 (?) 样本维度,我总是最终丢失它并且输出永远不会是 (?, 1) 形状。
如何构建一个外观整洁的图层,并执行所需的操作,输出 (?, 1) 形状?
【问题讨论】:
标签: python tensorflow keras concatenation keras-layer