c2-​随机产生函数种子seed、numpy.random.seed()、tf.random.set_seed学习​+转载整理

随机产生函数种子seed、numpy.random.seed()tf.random.set_seed学习

神经网络代码中,随机产生函数几乎都会出现在最开头的位置,足以说明其重要性。

我们得保证,每次代码产生的随机数是相同的,要不然每次运行出的数据都是不同的,不利于我们的研究分析

1.种子是什么

了解种子是什么,首先得了解随机数产生机制。

在numpy中,seed函数的作用为 Seed the random number generator(为随机生成函数生成种子),而seed函数中的参数seed可以理解成为了获取每次产生随机数时的 “开始位置”的数值。

我们可以把seed看作一个映射函数的输入,输入不同的值,都会有唯一对应的数值( “开始位置”)。

至于随机数,是一些顺序已经固定的序列。

通过seed得到的 “开始位置”,就能在固定随机序列中找到位置,进行输出。

至于tensorflow中的seed和numpy相似,可以进行类比。

2.numpy.random.seed() 函数

random_sample() 和 random() 其实是同一个函数,都是随机生成[0,1)之间的均匀分布浮点数

seed() 函数上面提到,是对随机生成函数指定随机 “开始位置”

接下来,我们进行具体实验,来看看numpy.random.seed()的具体效果

import numpy as np

#numpy seed只限制一层

for k in range(3):

    np.random.seed(123)

    for i in range(5):

        print( np.random.random() )

    print('\n')

for k in range(3):

    for i in range(5):

        np.random.seed(123)

        print( np.random.random() )

    print('\n')

np.random.seed(123)

for k in range(3):

    for i in range(5):

        print( np.random.random() )

    print('\n')

第一个循环结果:

三次相同的五个不同随机数 

第二个循环结果:

三次输出完全相同五个随机数

第三个循环结果:

三次完全不同的五个随机数int

 

 

总结输出结果,numpy.random.seed()只是针对某一层进行约束,不是全局约束

原文链接:https://blog.csdn.net/qq_38024084/article/details/103465294

3.tf.random.set_seed:设置全局随机种子

依赖随机种子的操作实上是从两个种子派生的:全局种子和操作级别种子。这个设置了全局种子。

#tensorflow2.0

tf.random.set_seed(

    seed

)

#tensorflow1.0

tf.set_random_seed(

    seed

它与操作级种子的交互如下:

如果既未设置全局种子也未设置操作种子:此操作使用随机选择的种子。

如果设置了图级别的种子(graph-level seed),但未设置操作种子(operation seed):系统确定性地选择一个操作种子和图级别的种子,以便获得唯一的随机序列。在tensorflow和用户代码的相同版本中,此序列是确定性的。但是,在不同版本中,此序列可能会更改。如果代码依赖特定的种子来工作,则明确指定图级别和操作级别种子。

如果设置了操作种子,但未设置全局种子:使用默认的全局种子和指定的操作种子来确定随机序列。

如果同时设置了全局种子和操作种子:将两个种子一起使用以确定随机序列。

如果设置了全局种子,但未设置操作种子,则每次对随机操作的调用都会得到不同的结果,但是对于程序的每次重新运行,其结果都是相同的

如果既未设置全局种子也未设置操作种子,则每次调用随机操作和每次重新运行程序都会得到不同的结果

如果置了操作种子,则每次对随机操作的调用都会得到不同的结果,但是对于程序的每次重新运行却得到相同的序列:

原文链接:https://blog.csdn.net/qq_36201400/article/details/108512368

好的,我提供一下使用pyswarms库实现ParallelPSO优化LSTM神经网络参数的示例代码: ```python import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense from pyswarms.backend import optimizer as op from pyswarms.backend.topology import Star from pyswarms.discrete import BinaryPSO from pyswarms.utils.functions import single_obj as fx from pyswarms.utils.plotters import plot_cost_history # Set random seed for reproducibility np.random.seed(42) # Define the LSTM model def create_model(units, batch_size, learning_rate): model = Sequential() model.add(LSTM(units=units, batch_input_shape=(batch_size, 1, 1), stateful=True)) model.add(Dense(2, activation='softmax')) optimizer = tf.keras.optimizers.Adam(lr=learning_rate) model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy']) return model # Define the fitness function def fitness_function(params, x_train, y_train): units = int(params[0]) batch_size = int(params[1]) learning_rate = 10 ** (-5 * params[2]) model = create_model(units=units, batch_size=batch_size, learning_rate=learning_rate) history = model.fit(x_train, y_train, epochs=10, batch_size=batch_size, verbose=0, shuffle=False) return -history.history['accuracy'][-1] # Define the problem x_train = np.random.rand(100, 1, 1) y_train = np.random.randint(0, 2, (100, 2)) options = {'c1': 0.5, 'c2': 0.3, 'w': 0.9, 'k': 10, 'p': 2} bounds = [(4, 128), (8, 64), (1, 10)] topology = Star() # Define the optimizer and run the optimization optimizer = op.ParallelPSO(n_particles=10, dimensions=3, options=options, bounds=bounds, topology=topology) cost, pos = optimizer.optimize(lambda x: fitness_function(x, x_train, y_train), iters=100) # Print the optimized parameters and the corresponding accuracy units, batch_size, learning_rate = int(pos[0]), int(pos[1]), 10 ** (-5 * pos[2]) print(f"Optimized parameters: units={units}, batch_size={batch_size}, learning_rate={learning_rate}") model = create_model(units=units, batch_size=batch_size, learning_rate=learning_rate) model.fit(x_train, y_train, epochs=10, batch_size=batch_size, verbose=0, shuffle=False) accuracy = model.evaluate(x_train, y_train, verbose=0)[1] print(f"Accuracy: {accuracy}") ``` 在这个示例代码中,我们使用了pyswarms库的ParallelPSO优化算法来优化LSTM神经网络的参数:units、batch size、learning rate。其中,LSTM的输出为2维。具体来说,我们首先定义了一个create_model函数,该函数可以根据给定的units、batch_size和learning_rate创建一个LSTM模型。然后,我们定义了一个fitness_function函数,该函数根据给定的参数,使用create_model函数创建一个LSTM模型,并使用给定的训练数据进行训练。最后,我们使用ParallelPSO算法来优化fitness_function函数,找到最优的参数。 需要注意的是,在这个示例代码中,我们使用了tensorflow.keras来创建LSTM模型,并使用tensorflow.keras.optimizers.Adam来定义优化器。同时,我们使用了pyswarms库提供的Star拓扑结构,该拓扑结构是一种基本的全局拓扑结构。另外,我们还使用了numpy和tensorflow库来实现数据处理和模型训练等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值