You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动计算Backpropagation结果与Keras输出权重不一致问题求助

手动反向传播与Keras训练后权重结果不一致

我手动计算反向传播后的权重结果为0.19926,但用Keras训练相同结构的MLP后,输出的权重却是0.19882499,二者数值不匹配。

相关信息

  • 已完成手动反向传播计算过程(对应计算逻辑图)
  • MLP结构:输入层2神经元,隐藏层5个带sigmoid激活的神经元(无偏置),输出层1个带sigmoid激活的神经元(无偏置)
  • 初始权重设置:隐藏层权重全部为0.1,输出层权重全部为0.2
    -- 训练参数:SGD优化器(学习率0.01,无动量等额外配置),损失函数为均值绝对误差(MAE),单样本输入[[0,0]]、标签[[0]],训练1轮

Keras实现代码

from keras.mixed_precision.loss_scale_optimizer import optimizer 
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

xtrain=[[0,0]]
ytrain=[[0]]
inputs = keras.Input(shape=(2,))
x=keras.layers.Dense(5,activation="sigmoid", use_bias=False, bias_initializer='zeros')(inputs)
output=layers.Dense(1,activation="sigmoid", use_bias=False, bias_initializer='zeros')(x)
model=keras.Model(inputs=inputs,outputs=output,name="xor")
model.compile(loss='mean_absolute_error',
              optimizer=tf.keras.optimizers.SGD(
    learning_rate=0.01,
    momentum=0.0,
    nesterov=False,
    weight_decay=0.0,
    clipnorm=None,
    clipvalue=None,
    global_clipnorm=None,
    use_ema=False,
    ema_momentum= 0,
    ema_overwrite_frequency=None,
    jit_compile=True,
    name="SGD",

))
i=0
for layerNum, layer in enumerate(model.layers):
    if(i==1):
      layer.set_weights([np.array([[0.1,0.1,0.1,0.1,0.1],[0.1,0.1,0.1,0.1,0.1]])])
    if(i==2):
      layer.set_weights([np.array([[0.2],[0.2],[0.2],[0.2],[0.2]])])
    i=i+1

history=model.fit(xtrain,ytrain,batch_size=1,epochs=1)

for layerNum, layer in enumerate(model.layers):
    weights = layer.get_weights()
    print("weights=",weights)
    print(layerNum,"layerNum") 

内容的提问来源于stack exchange,提问作者ea13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:01:26