我试图了解共享层在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)一样吗?这意味着在这种情况下,第一层正在像硬参数共享类型方案中一样工作?另外,如果我定义了所有共享的层,是否可以有效地使网络与第一层相同?