我在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在辍学时的表现。 帮帮我
目前没有回答
相关问题 更多 >
编程相关推荐