繁体   English   中英

Keras:为什么 Sequential 和 Model 给出不同的输出?

[英]Keras : Why does Sequential and Model give different outputs?

我正在使用 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的第一层输入.

有没有人知道为什么这个神经网络不同? 如果没有,为什么我得到不同的结果?

谢谢

您仅在 numpy 中而不是在 tensorflow 中设置随机种子(以防它是您的 keras 的后端)。 尝试将其添加到您的代码中:

from numpy.random import seed
seed(1337)
from tensorflow import set_random_seed
set_random_seed(1337)

关于这个主题的详细文章在这里

 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM