我试图了解共享层在Keras中的工作原理 . 想象一下,我有以下网络,输入(100,10,4) . 输入为每个时间步长100个样本,10个步骤和5个特征 . 我希望通过1D-CNN对此进行建模 . 输出是针对4个特征中的每一个预测的10个步骤 .

x=Conv1D(8, 3, activation='relu')(input_x)
x=Conv1D(16, 3, activation='relu')(x)
x=Conv1D(32, 3, activation='relu')(x)
x=Flatten()(x)
x=Dense(200,activation='relu')(x)
x=Dense(100,activation='relu')(x)
outputs_1 = Dense(10)(x)
outputs_2 = Dense(10)(x)
outputs_3 = Dense(10)(x)
outputs_4 = Dense(10)(x)

从多任务学习的角度来看,我将其解释为硬参数共享 . 另一方面,我可以按如下方式定义网络:

shared_conv1 = Conv1D(filters=8, kernel_size=3, activation='relu')

for i in range(4):
    inputs = Input(shape=(n_timesteps,1))
    conv1 = shared_conv1(inputs)
    conv2 = Conv1D(filters=16, kernel_size=3, activation='relu')(conv1) 
    conv3 = Conv1D(filters=32, kernel_size=3, activation='relu')(conv2)
    flat = Flatten()(conv3)
    in_layers.append(inputs)
    out_layers.append(flat)

merged = concatenate(out_layers)

# interpretation
dense1 = Dense(200, activation='relu')(merged)
dense2 = Dense(100, activation='relu')(dense1)

outputs_1 = Dense(10)(dense2)
outputs_2 = Dense(10)(dense2)
outputs_3 = Dense(10)(dense2)
outputs_4 = Dense(10)(dense2)

这个共享层如何工作?该定义从keras文档中解释了权重是共享的 . 将conv1D从第一个模型应用到所有输入(100,10,4)是否相同?这意味着在这种情况下,第一层的工作方式与硬参数共享类型方案相同?此外,如果我定义共享的所有图层,这是否会有效地使网络与第一个图像相同?