tensorflow中种子的含义是什么?
我是TensorFlow的初学者,我的书中说我应该先把这段代码放在前面,以产生相同的结果序列tensorflow中种子的含义是什么?,tensorflow,Tensorflow,我是TensorFlow的初学者,我的书中说我应该先把这段代码放在前面,以产生相同的结果序列 seed = 3 np.random.seed(seed) tf.random.set_seed(seed) 我在seed中输入了不同的值,结果显示了很大的差异 它是否影响权重的初始值设置? 种子值设置到底起什么作用?这不是一个专门针对TensorFlow的术语。几乎每种编程语言都有一个种子,用于确定随机数生成器的随机性等。使用种子,您可以重新生成结果。为了重现结果,您需要重新启动内核,看看它们之间的
seed = 3
np.random.seed(seed)
tf.random.set_seed(seed)
我在seed中输入了不同的值,结果显示了很大的差异
它是否影响权重的初始值设置?
种子值设置到底起什么作用?这不是一个专门针对TensorFlow的术语。几乎每种编程语言都有一个种子,用于确定随机数生成器的随机性等。使用种子,您可以重新生成结果。为了重现结果,您需要重新启动内核,看看它们之间的区别。例如:
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
seed = 3
np.random.seed(seed)
tf.random.set_seed(seed)
model = Sequential()
model.add(Dense(2, activation="relu", input_shape = (28,28,1), kernel_initializer=initializer))
model.add(Dense(1, kernel_initializer=initializer))
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=['accuracy'])
这将提供第1次运行:
>> model.get_weights()
[array([[-1.036157 , 0.19191754]], dtype=float32),
array([0., 0.], dtype=float32),
array([[-0.86388123],
[-0.8873284 ]], dtype=float32),
array([0.], dtype=float32)]
如果第二次创建相同的模型:
>> model.get_weights()
[array([[-0.4151404 , 0.81533253]], dtype=float32),
array([0., 0.], dtype=float32),
array([[ 0.39391458],
[-0.48291653]], dtype=float32),
array([0.], dtype=float32)]
产生相同的结果序列
现在,重新启动内核并再次创建模型。第一次和第二次运行的结果应相同
如果希望每次创建具有完全相同权重的模型,则需要执行以下操作:
initializer = tf.keras.initializers.GlorotNormal(seed=seed)
model.add(Dense(2, activation="relu", input_shape = (28,28,1), kernel_initializer=initializer))
model.add(Dense(1, kernel_initializer=initializer))
>> model.get_weights()
[array([[-0.6233864, 1.5557635]], dtype=float32),
array([0., 0.], dtype=float32),
array([[-0.6233864],
[ 1.5557635]], dtype=float32),
array([0.], dtype=float32)]
将是相同的,无论您创建了多少次模型,即使在重新启动内核之后