gpt4 book ai didi

python - 如何使用 set_random_seed 获得相同的结果

转载 作者:行者123 更新时间:2023-11-30 09:41:54 25 4
gpt4 key购买 nike

我正在尝试了解 LSTM 单元。我已经阅读了几篇文章,现在正在尝试使用 Tensorflow 编写自己的代码。

我从这个tutorial中发现了这段代码。所以我复制了lstm.py文件和数据文件sp500.csv。下面的代码是我写的。

一切正常。每次运行模型时,我都会得到非常不同的预测。我明白,因为这个模型非常基本(试图仅使用收盘价来预测股票价格),这是可以预料的。我还相信背景 tensorflow 使用一些随机化过程来启动变量。

我想运行模型并每次都得到相同的结果。所以我读到要做到这一点我需要使用 set_random_seed。

我已将其添加到下面的代码中,但是当我重新运行代码时,我得到了非常不同的预测。我应该如何使用 set_random_seed 以及为什么参数是 1234?

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, LSTM, Dropout, Activation
import lstm, time
import tensorflow as tf

def RunML():

tf.set_random_seed(1234)

X_train, y_train, X_test, y_test = lstm.load_data('sp500.csv', 50, True)

model = Sequential()

model.add(LSTM(50,
input_shape=(50, 1),
return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(
100,
return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(1))
model.add(Activation('linear'))

start = time.time()
model.compile(loss='mse', optimizer='rmsprop')
print ('compilation time : ', time.time() - start)

#Step 3 Train the model
model.fit(
X_train,
y_train,
batch_size=512,
nb_epoch=1,
validation_split=0.05)

predictions = lstm.predict_sequences_multiple(model, X_test, 50, 50)
lstm.plot_results_multiple(predictions, y_test, 50)

最佳答案

如果您在构建图表之前设置随机种子,您将获得可重现的结果。例如,给定一个随机输入:

random_input = np.random.rand(2, 50, 1)

我们可以定义一个tf.keras.model:

tf.keras.backend.clear_session()
tf.set_random_seed(42)

model_1 = Sequential()

model_1.add(LSTM(50, input_shape=(50, 1), return_sequences=True))
model_1.add(Dropout(0.2))

model_1.add(LSTM(100, return_sequences=False))
model_1.add(Dropout(0.2))

model_1.add(Dense(1))
model_1.add(Activation('linear'))

model_1.compile(loss='mse', optimizer='rmsprop')

random_predict_1 = model_1.predict(random_input)

然后另一个:

tf.keras.backend.clear_session()
tf.set_random_seed(42)

model_2 = Sequential()

model_2.add(LSTM(50, input_shape=(50, 1), return_sequences=True))
model_2.add(Dropout(0.2))

model_2.add(LSTM(100, return_sequences=False))
model_2.add(Dropout(0.2))

model_2.add(Dense(1))
model_2.add(Activation('linear'))

model_2.compile(loss='mse', optimizer='rmsprop')

random_predict_2 = model_2.predict(random_input)

现在,如果我们对 random_input 张量进行推理,我们将获得两个模型相同的结果,因为它们具有相同的随机种子来启动。

np.testing.assert_array_equal(random_predict_1, random_predict_2)

综上所述,无论您使用哪种随机种子,如果在使用tf.set_random_seed(seed)构建图之前将随机种子设置为相同的数字,您将得到相同的结果结果。

关于python - 如何使用 set_random_seed 获得相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com