Keras:为啥 Sequential 和 Model 给出不同的输出?
Posted
技术标签:
【中文标题】Keras:为啥 Sequential 和 Model 给出不同的输出?【英文标题】:Keras : Why does Sequential and Model give different outputs?Keras:为什么 Sequential 和 Model 给出不同的输出? 【发布时间】:2018-07-11 17:45:13 【问题描述】:我正在使用 Keras 来计算一个简单的序列分类神经网络。我使用了不同的模块,发现有两种方法可以创建顺序神经网络。
第一种方法是使用 Sequential API。这是我在很多教程/文档中发现的最常见的方式。 这是代码:
# Sequential Neural Network using Sequential()
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu', input_shape=(27 , 300,)))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100))
model.add(Dense(len(7, activation='softmax'))
model.summary()
第二种方法是使用模型 API 从“零开始”构建顺序神经网络。这是代码。
# Sequential neural network using Model()
inputs = Input(shape=(27 , 300))
x = Conv1D(filters=32, kernel_size=3, padding='same', activation='relu')(inputs)
x = MaxPooling1D(pool_size=2)(x)
x = LSTM(100)(x)
predictions = Dense(7, activation='softmax')(x)
model = Model(inputs=inputs, outputs=predictions)
model.summary()
我使用固定种子 (np.random.seed(1337)) 对其进行了训练,使用相同的训练数据并且我的输出不同... 知道摘要中唯一的区别是模型 API 的第一层输入。
有没有人知道为什么这个神经网络是不同的? 如果没有,为什么我会得到不同的结果?
谢谢
【问题讨论】:
价值观有何不同?您使用的是哪种环境? 即使您多次重新训练同一个模型,由于权重的随机初始化也可能会发生微小的差异。您可以通过运行 Sequential API 模型几次来检查。 @MatiasValdenegro 输出确实不同,由于我工作的公司,我无法向您展示结果。我正在将 python3 与使用 tensorflow 后端的 Keras 一起使用。 @Manngo 好的,谢谢。我有办法修复权重的种子吗? 只是为了确保没有发生任何随机事件,您是否尝试过两次训练相同的网络并查看是否得到相同的结果?事实并非如此,有些东西仍然是随机的 【参考方案1】:您仅在 numpy 而不是在 tensorflow 中设置随机种子(如果它是您的情况下 keras 的后端)。尝试将其添加到您的代码中:
from numpy.random import seed
seed(1337)
from tensorflow import set_random_seed
set_random_seed(1337)
关于这个话题的详细文章here
【讨论】:
【参考方案2】: tf.keras.backend.clear_session()
tf.random.set_seed(seed_value)
您可以使用上面的代码块并运行加载的模型进行一些迭代并检查错误是否仍然存在。 我在重复性方面面临同样的问题,它对我有用。 正如 andrey 所说,除了这两个种子设置器之外,您还需要设置 Python 哈希环境
import os
os.environ['PYTHONHASHSEED']=str(seed_value)
您仍然可以再添加一个块来强制 TensorFlow 使用单线程。 (如果您使用的是多核) 多线程是不可重现结果的潜在来源。
session_conf = tf.ConfigProto(
intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1)
sess = tf.Session(config=session_conf)
【讨论】:
以上是关于Keras:为啥 Sequential 和 Model 给出不同的输出?的主要内容,如果未能解决你的问题,请参考以下文章
Keras学习手册,Keras 模型-Sequential API
不能将tf.keras.optimizer与tf.keras.models.sequential一起使用
对于 tensorflow.keras.models.Sequential.predict 中的多类多标签问题,是不是可能只得到 0 和 1?