如何在keras中定义共享层?

时间:2018-12-07 14:25:07

标签: machine-learning keras

我试图了解共享层在Keras中的工作方式。假设我有以下网络,输入为(100,10,4)。输入为100个样本,10个时间步长和每个时间步长5个特征。我希望通过1D-CNN对此建模。输出为这4个功能中的每一个预测了10个步骤。

    .section    .text.run_bootloader,"ax",%progbits
    .hidden run_bootloader          @ -- Begin function run_bootloader
    .globl  run_bootloader
    .p2align    2
    .type   run_bootloader,%function
    .code   16                      @ @run_bootloader
    .thumb_func
run_bootloader:
.Lfunc_begin2:
    .loc    2 1338 0                @ ../_Primary/source/can_tools.c:1338:0
    .fnstart
    .cfi_startproc
@ BB#0:
    .save   {r7, lr}
    push    {r7, lr}
.Lcfi8:
    .cfi_def_cfa_offset 8
.Lcfi9:
    .cfi_offset lr, -4
.Lcfi10:
    .cfi_offset r7, -8
    .pad    #8
    sub sp, #8
.Lcfi11:
    .cfi_def_cfa_offset 16
.Ltmp8:
    .loc    2 1343 28 prologue_end  @ ../_Primary/source/can_tools.c:1343:28
    movs    r0, #4
    ldr r0, [r0]
    .loc    2 1343 26 is_stmt 0     @ ../_Primary/source/can_tools.c:1343:26
    str r0, [sp, #4]
    .loc    2 1344 52 is_stmt 1     @ ../_Primary/source/can_tools.c:1344:52
    ldr r0, [sp, #4]
    .loc    2 1344 12 is_stmt 0     @ ../_Primary/source/can_tools.c:1344:12
    str r0, [sp]
    .loc    2 1345 5 is_stmt 1      @ ../_Primary/source/can_tools.c:1345:5
    ldr r0, [sp]
    blx r0
    .loc    2 1346 1                @ ../_Primary/source/can_tools.c:1346:1
    add sp, #8
    pop {r7, pc}
.Ltmp9:
.Lfunc_end2:
    .size   run_bootloader, .Lfunc_end2-run_bootloader
    .cfi_endproc
    .cantunwind
    .fnend
                                        @ -- End function

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

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)

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

0 个答案:

没有答案