结构相近的Keras模型输出结果不同,求差异原因
两个Keras模型输出差异的原因分析
从给出的代码来看,两个模型的网络结构看似一致,但输出始终不同,核心原因及差异点如下:
权重初始化的随机性:
两个模型的所有层(除输出层明确指定normal初始化外)都会进行随机权重初始化,而normal初始化本身也是基于随机分布生成权重。即使结构完全相同,不同模型的初始权重集合是随机的,这会直接导致前向传播输出不同。如果需要让两个模型输出一致,必须在创建模型前固定全局随机种子:import tensorflow as tf import numpy as np tf.random.set_seed(42) np.random.seed(42)层的实例化方式差异:
模型1提前实例化所有层对象(Input、hidden、hidden2、output),再将这些对象传入Sequential;模型2则是在Sequential内部直接实例化每一层。这种方式的差异本身不会改变网络结构,但如果模型1的层对象被其他代码重复使用(比如加入另一个模型),会触发权重共享,导致输出异常。在当前给出的代码中,每个层仅被使用一次,所以该差异主要影响初始化时的随机状态,间接导致输出不同。潜在的导入不一致问题:
模型1中Dense使用完整路径tf.keras.layers.Dense,但Dropout直接调用;模型2中Dense和Dropout均直接调用。如果两者的Dropout来自不同的导入路径(比如模型1用from keras.layers import Dropout,模型2用from tensorflow.keras.layers import Dropout),虽然功能相近,但底层实现的细微差异也可能导致输出不同。
内容的提问来源于stack exchange,提问作者Filbert Anderson
相关产品推荐
相关产品推荐

