You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Keras构建权重共享的独立神经网络模型?

Keras实现多输入共享权重神经网络的方案

完全可以实现你的需求,Keras的层/模型共享机制刚好能解决这个问题——每个输入单独经过一套权重相同的神经网络,所有路径复用同一套参数,更新时同步调整。

实现思路

  1. 定义一套可复用的神经网络结构(可以是完整模型,也可以是一组层)
  2. 为每个输入创建独立的输入张量
  3. 让每个输入张量经过这套共享的网络结构,得到各自的输出
  4. 根据任务需求合并所有输出(如拼接、相加、取平均等)
  5. 构建最终模型并完成编译、训练

代码示例(两种方式)

方式1:共享完整模型

from tensorflow.keras.layers import Input, Dense, Concatenate
from tensorflow.keras.models import Model

# 定义共享的神经网络结构
def build_shared_nn():
    inputs = Input(shape=(10,))  # 假设单个输入维度为10
    x = Dense(64, activation='relu')(inputs)
    x = Dense(32, activation='relu')(x)
    outputs = Dense(5, activation='softmax')(x)
    return Model(inputs, outputs)

# 创建共享模型实例
shared_nn = build_shared_nn()

# 定义多个输入
input1 = Input(shape=(10,))
input2 = Input(shape=(10,))
input3 = Input(shape=(10,))

# 每个输入经过共享模型
output1 = shared_nn(input1)
output2 = shared_nn(input2)
output3 = shared_nn(input3)

# 合并输出(示例为拼接,可根据需求修改)
merged_output = Concatenate()([output1, output2, output3])

# 构建最终模型
final_model = Model(inputs=[input1, input2, input3], outputs=merged_output)
final_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

方式2:共享独立层

如果不需要完整模型,也可以直接共享单个层实例:

from tensorflow.keras.layers import Input, Dense, Concatenate
from tensorflow.keras.models import Model

# 定义共享的层
shared_dense1 = Dense(64, activation='relu')
shared_dense2 = Dense(32, activation='relu')
shared_dense3 = Dense(5, activation='softmax')

# 定义多个输入
input1 = Input(shape=(10,))
input2 = Input(shape=(10,))

# 输入1经过共享层
x1 = shared_dense1(input1)
x1 = shared_dense2(x1)
output1 = shared_dense3(x1)

# 输入2经过同一组共享层
x2 = shared_dense1(input2)
x2 = shared_dense2(x2)
output2 = shared_dense3(x2)

# 合并输出
merged_output = Concatenate()([output1, output2])

# 构建最终模型
final_model = Model(inputs=[input1, input2], outputs=merged_output)
final_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

关键说明

你之前的误解在于对“共享层”的认知:共享层并非要接收全部输入,而是层的权重参数被多个输入路径复用。每个输入单独经过共享的层/模型,处理自己的输入数据,但所有路径使用同一套权重,训练时参数更新会同步作用于所有路径。

内容的提问来源于stack exchange,提问作者Deniz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:01:09