如何在Keras中获得可重复的权重初始化?

mdfafbf1  于 2022-12-04  发布在  其他
关注(0)|答案(3)|浏览(282)

1.我将numpy和tensorflow随机种子都设置为suggested
1.生成一些数据-此部分可重现,始终给出相同的结果
1.创建一个简单的网络并进行预测(不进行训练,仅使用随机权重)-每次预测都不相同

import numpy as np
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras import Sequential, optimizers
import tensorflow as tf

np.random.seed(32)
tf.set_random_seed(33)

random_data = np.random.rand(10, 2048)
print(random_data[:,0])

def make_classifier():
    model = Sequential()
    model.add(Dense(1024, activation='relu', input_dim=2048))
    model.add(Dropout(0.5))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(optimizer=optimizers.RMSprop(lr=2e-4),
              loss='binary_crossentropy')
    return model
model = make_classifier()
# model.summary()
model.predict(random_data)

当我重新运行整个单元格时,print语句总是输出[0.85888927 0.23846818 0.17757634 0.07244977 0.71119893 0.09223853 0.86074647 0.31838194 0.7568638 0.38197083],但是每次的预测都不一样:
第一次
如此等等。
1.如何对刚初始化的网络进行可重现的预测?
1.权重初始化究竟在什么时候发生?在我编译模型时还是...

oxf4rvwz

oxf4rvwz1#

我一直在努力解决这个问题,结果发现,为了在每个案例中实现完全的一致性,必须设置相当多的点:
首先,确保输入模型的数据(以及数据的顺序)是一致的。然后,对于模型权重初始化:
1)numpy随机种子

import numpy as np
np.seed(1)

2)tensorflow 随机种子

import tensorflow as tf
tf.set_random_seed(2)

3)Python随机种子

import random
random.seed(3)

除此之外,你还必须为model.fit设置两个参数(如果你有多处理能力的话)。

model.fit(..., shuffle=False, use_multiprocessing=False)

只有这样,我才能在训练中达到完全的一致性。
希望对大家有帮助!

hgc7kmma

hgc7kmma2#

tf.keras.initializers对象具有用于可重现初始化的seed参数。
第一个
在Keras层中,可以按如下方式使用它:

tf.keras.layers.Dense(1024, 
                      activation='relu', 
                      input_dim=2048,
                      kernel_initializer=tf.keras.initializers.GlorotUniform(seed=42))
izj3ouym

izj3ouym3#

我认为更好的做法是

tf.keras.utils.set_random_seed(
    seed
)

参考:https://www.tensorflow.org/api_docs/python/tf/keras/utils/set_random_seed

相关问题