我不明白Keras在辍学时的表现

2024-09-29 01:34:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中使用Keras构建了一个带有辍学的神经网络。我想知道这个网络是如何更新权重的。为简单起见,只准备了一份培训数据

我在以下条件下对模型进行了培训: (1) :不包括退出层的模型 (2) :包含退出层且关键字training=False的模型(在预测阶段忽略退出) (3) :包含辍学层并设置关键字training=True的模型(辍学也用于预测阶段)

(我想用(3)来评估预测值的不确定性。)

在模型完成训练阶段后,我查看了模型中的重量更新量。 具体来说,我将显示源代码和执行结果

[节目]

drrate = 0.5

sample_x = np.array([[10]])
sample_y = np.array([1])

# Model
input_layer = Input(shape=(1,))
dence = input_layer
dence = Dropout(drrate)(dence, training=False) # In Condition (1), this line doesn't use.
dence = Dense(2,
                kernel_initializer= wi.glorot_normal(seed=0),
                bias_initializer= wi.glorot_normal(seed=1)
                )(dence)
dence = Activation("sigmoid")(dence)
dence = Dense( 1 ,
                kernel_initializer= wi.glorot_normal(seed=2),
                bias_initializer= wi.glorot_normal(seed=3)
              )(dence)
dence = Activation("linear")(dence)

model = Model(inputs=input_layer, outputs=dence)
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.summary()

model.fit(sample_x, sample_y)
weights = model.get_weights()
print("-----------Training-----------")
print(weights)
print("w11 : ", (weights[0][0][0] - w_11) )
print("w12 : ", (weights[0][0][1] - w_12) )
print("w21 : ", (weights[2][0][0] - w_21) )
print("w22 : ", (weights[2][1][0] - w_22) )

print("b11 : ", (weights[1][0] - b_11) )
print("b12 : ", (weights[1][1] - b_12) )
print("b21 : ", (weights[3][0] - b_21) )

[结果] 我们进行了几次模拟并总结了它们的结果。 (结果显示权重的“更新量”。)

(Condition : 1)
・Pattern - 1
w11 :  0.00074356794
w12 :  0.00074353814
w21 :  -0.00073981285
w22 :  -0.0007440895
b11 :  0.00073862076
b12 :  0.00073826313
b21 :  -0.0007441044


(Condition : 2)
・Pattern - 1
w11 :  0.00074356794
w12 :  0.00074353814
w21 :  -0.00073981285
w22 :  -0.0007440895
b11 :  0.00073862076
b12 :  0.00073826313
b21 :  -0.0007441044

・Pattern - 2
w11 :  0.0009992719
w12 :  0.0009991974
w21 :  -0.0009942055
w22 :  -0.0009999275
b11 :  0.0009925961
b12 :  0.0009920597
b21 :  -0.0009999275

(Condition : 3)
・Pattern - 1
w11 :  0.0009864867
w12 :  0.0009983182
w21 :  -0.0008209944
w22 :  -0.0009999424
b11 :  0.0007850528
b12 :  0.0009675026
b21 :  -0.0009999275

・Pattern - 2
w11 :  0.0
w12 :  0.0
w21 :  0.0009999871
w22 :  0.0009999871
b11 :  -0.0009999275
b12 :  -0.0009996891
b21 :  0.0010000467

・Pattern - 3
w11 :  0.0007340908
w12 :  0.0007428825
w21 :  -0.0006109476
w22 :  -0.0007440895
b11 :  0.0005841851
b12 :  0.0007199049
b21 :  -0.0007441044

结果表明:

・ 启用退出时,更新金额将被更正

・ 根据训练是真是假,校正方法有所不同

不过,我有以下问题:

・ 为什么在条件2中没有“更新量为0的模式”

・ 为什么在条件3中得到3个模式结果而不是2个模式

・为什么条件3不能产生与条件1和条件2相同的结果

我不明白Keras在辍学时的表现。 帮帮我


Tags: sample模型model条件patternprintweightsb12