如何用TensorFlow Keras实现基于第一输入计算第二输入层的神经网络?
TensorFlow Keras实现由首个输入计算生成次级输入的网络结构
根据你的需求,第二个输入的所有特征都由第一个输入的特征计算得到,不需要额外传入第二个输入层,而是在网络内部完成特征计算后再接入隐藏层。下面提供两种实现方式:
方式一:用Lambda层实现简单计算
如果你的特征计算逻辑是简单的数学运算(比如求和、乘积、平方等),直接用Lambda层封装计算逻辑即可:
import tensorflow as tf from tensorflow.keras.layers import Input, Dense, Lambda from tensorflow.keras.models import Model # 定义第一个输入层(对应示例中的A、B、C特征) input_first = Input(shape=(3,), name="First_Input") # 通过Lambda层计算第二个输入的所有特征(G、M、N、O) # 这里示例计算逻辑:G=A+B+C,M=A*B,N=B-C,O=A² computed_features = Lambda(lambda x: tf.concat([ tf.reduce_sum(x, axis=1, keepdims=True), # 计算G:A+B+C tf.multiply(x[:, 0:1], x[:, 1:2]), # 计算M:A*B tf.subtract(x[:, 1:2], x[:, 2:3]), # 计算N:B-C tf.square(x[:, 0:1]) # 计算O:A² ], axis=1), name="Computed_Second_Input")(input_first) # 连接隐藏层与输出层 hidden = Dense(64, activation="relu")(computed_features) output = Dense(1, activation="linear")(hidden) # 构建并查看模型 model = Model(inputs=input_first, outputs=output) model.summary()
方式二:自定义层实现复杂计算
如果你的特征计算逻辑比较复杂(比如涉及多步条件判断、自定义函数等),推荐使用自定义Layer类来封装计算逻辑:
import tensorflow as tf from tensorflow.keras.layers import Input, Dense, Layer from tensorflow.keras.models import Model class ComputedFeatureLayer(Layer): def __init__(self): super(ComputedFeatureLayer, self).__init__() def call(self, inputs): # 拆分第一个输入的特征A、B、C A = inputs[:, 0:1] B = inputs[:, 1:2] C = inputs[:, 2:3] # 计算第二个输入的各个特征 G = A + B + C M = A * B N = B - C O = tf.pow(A, 2) # 拼接所有计算后的特征并返回 return tf.concat([G, M, N, O], axis=1) # 构建网络 input_first = Input(shape=(3,), name="First_Input") computed_features = ComputedFeatureLayer()(input_first) hidden = Dense(64, activation="relu")(computed_features) output = Dense(1, activation="linear")(hidden) model = Model(inputs=input_first, outputs=output) model.summary()
注意点
你提供的原始代码是将两个独立输入层拼接,这和需求不符——因为需求中第二个输入不需要手动传入,而是由第一个输入计算生成,所以不需要定义第二个Input层,直接通过计算得到特征后接入后续网络即可。
内容的提问来源于stack exchange,提问作者Nana Kofi Boakye
相关产品推荐
相关产品推荐

