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.权重初始化究竟在什么时候发生?在我编译模型时还是...
3条答案
按热度按时间oxf4rvwz1#
我一直在努力解决这个问题,结果发现,为了在每个案例中实现完全的一致性,必须设置相当多的点:
首先,确保输入模型的数据(以及数据的顺序)是一致的。然后,对于模型权重初始化:
1)numpy随机种子
2)tensorflow 随机种子
3)Python随机种子
除此之外,你还必须为
model.fit
设置两个参数(如果你有多处理能力的话)。只有这样,我才能在训练中达到完全的一致性。
希望对大家有帮助!
hgc7kmma2#
tf.keras.initializers
对象具有用于可重现初始化的seed
参数。第一个
在Keras层中,可以按如下方式使用它:
izj3ouym3#
我认为更好的做法是
参考:https://www.tensorflow.org/api_docs/python/tf/keras/utils/set_random_seed