random模块的使用

介绍

1. random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间
import random
print(random.random())
2. random.uniform(a, b): 返回随机生成的一个浮点数,范围在[a, b)之间
import random
print(random.uniform(1,5))

 3. random.randint(a,b)生成指定范围内的整数 ,闭区间

import random
print(random.randint(1,10))
#包括1和10
4. random.randrange([start],stop[,step]):用于从指定范围内按指定基数递增的集合中获取一个随机数。 

例如random.randrange(10,100,2),结果相当于从 [10,12,14,16...96,98] 序列中获取一个随机数。random.randrange (10,100,2) 的结果上与 random.choice(range(10,100,2)) 等效。

import random
print(random.randrange(10,22,3))
5. random.choice():从指定的序列中获取一个随机元素

random.choice()从序列中获取一个随机元素,其原型为random.choice(sequence),参数sequence表示一个有序类型。这里说明一下,sequence在Python中不是一种特定的类型,而是泛指序列数据结构。列表,元组,字符串都属于sequence。

import random
print(random.choice('学习python'))   # 从字符串中随机取一个字符
print(random.choice(['good', 'hello', 'is', 'hi', 'boy']))   # 从list列表中随机取
print(random.choice(('str', 'tuple', 'list')))   # 从tuple元组中随机取

 6. random.shuffle(x[,random]):用于将一个列表中的元素打乱,随机排序

import random
p=['hehe','xixi','heihei','haha','zhizhi','lala','momo..da']
random.shuffle(p)
print(p)
x = [1, 2, 3, 4, 5]
random.shuffle(x)
print(x)
“”“
随机打乱顺序
['zhizhi', 'lala', 'xixi', 'hehe', 'momo..da', 'haha', 'heihei']
[2, 3, 1, 4, 5]
”“”
7. random.sample(sequence,k):用于从指定序列中随机获取指定长度的片段,sample()函数不会修改原有序列。
import random
list1=[1,2,3,4,5,6,7,8,9,10]
slice=random.sample(list1,5)
print(slice)
#[8, 3, 5, 9, 10]
print(list1)
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
x = random.sample(range(0, 10), 5)
print(x, type(x))
#[9, 2, 7, 8, 6] <class 'list'>
Words = "AppleKMedoide"
print(random.sample(Words, 3))
#['p', 'M', 'A']
print(random.sample(Words, 3))
#['d', 'i', 'l']
8. np.random.rand(d0, d1, …, dn): 返回一个或一组浮点数,范围在[0, 1)之间
import random
import numpy as np
x = np.random.rand()
y = np.random.rand(4)
print(x,type(x))
#0.09842641570445387 <class 'float'>
print(y,type(y))
#[0.27298291 0.12350038 0.63977128 0.90791234] <class 'numpy.ndarray'>
9. np.random.normal(loc=a, scale=b, size=()): 返回满足条件为均值=a, 标准差=b的正态分布(高斯分布)的概率密度随机数

np.random.normal(loc=a, scale=b, size=()) - 返回满足条件为均值=a, 标准差=b的正态分布(高斯分布)的概率密度随机数,size默认为None(返回1个随机数),也可以为int或数组

import random
import numpy as np
x = np.random.normal(10,0.2,2)
print(x,type(x))
#[9.78391585 9.83981096] <class 'numpy.ndarray'>
y = np.random.normal(10,0.2)
print(y,type(y))
#9.871187751372984 <class 'float'>
z = np.random.normal(0,0.1,(2,3))
print(z,type(z))
#[[-0.07114831 -0.10258022 -0.12686863]
# [-0.08988384 -0.00647591  0.06990716]] <class 'numpy.ndarray'>
z = np.random.normal(0,0.1,[2,2])
print(z,type(z))
#[[ 0.07178268 -0.00226728]
# [ 0.06585013 -0.04385656]] <class 'numpy.ndarray'>
10 np.random.randn(d0, d1, … dn): 返回标准正态分布(均值=0,标准差=1)的概率密度随机数

np.random.randn(d0, d1, ... dn): 返回标准正态分布(均值=0,标准差=1)的概率密度随机数

import random
import numpy as np
x = np.random.randn()
y = np.random.randn(3)
z = np.random.randn(3, 3)
print(x, type(x))
print(y, type(y))
print(z, type(z))
“”“
-0.9893106774468914 <class 'float'>
[0.72600192 1.2753365  1.92146416] <class 'numpy.ndarray'>
[[ 0.71652297  0.73767113 -0.80015731]
 [ 0.13988322 -1.2229958  -3.0327288 ]
 [-0.46236008 -0.75596456 -0.96029974]] <class 'numpy.ndarray'>
”“”
12. np.random.randint(a, b, size=(), dtype=int): 返回在范围在[a, b)中的随机整数(含有重复值)

np.random.randint(a, b, sizie=(), dytpe=int) - size默认为None(返回1个随机数),也可以为int或数组

import random
import numpy as np
# 从序列[0, 10)之间返回shape=(5,5)的10个随机整数(包含重复值)
x = np.random.randint(0, 10, size=(5, 5))
# 从序列[15, 20)之间返回1个随机整数(size默认为None, 则返回1个随机整数)
y = np.random.randint(15, 20)
print(x, type(x))
print(y, type(y))
“”“
[[8 4 0 5 3]
 [9 9 2 6 2]
 [0 9 6 4 9]
 [8 6 4 0 9]
 [9 2 0 4 8]] <class 'numpy.ndarray'>
18 <class 'int'>
”“”

13. random.seed(): 设定随机种子

在设定随机种子为10之后,random.random()的随机数将被直接设定为0.5714025946899135

 

import random
random.seed(10)
x = random.random()
print(x,type(x))
random.seed(10)
y = random.random()
print(y,type(y))
z = random.random()
print(z,type(z))

二、numpy.random.seed() 函数介绍

seed( ) 函数用于指定随机数生成时所用算法开始的整数值,如果使用相同的 seed() 值,则每次生成的随机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

但是,只在调用的时候seed()一下并不能使生成的随机数相同,需要每次调用都seed()一下,表示种子相同,从而生成的随机数相同。
 

实例 1:相同的随机种子下生成相同的随机数

from numpy import *
num=0
while(num<5):
    random.seed(5)
    print(random.random())
    num+=1
“”“
0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948
0.22199317108973948

”“”

实例 2:一个随机种子在代码中只作用一次,只作用于其定义位置的下一次随机数生成

from numpy import *
num=0
print(random.random())
random.seed(5)
while(num<5):
    print(random.random())
    num+=1
“”“
0.03448381943112333
0.22199317108973948    # 随机种子为 5 下生成的随机数,与实例 1 中的数相同
0.8707323061773764
0.20671915533942642
0.9186109079379216
0.48841118879482914
”“”

总结:若想每次都能得到相同的随机数,每次产生随机数之前,都需要调用一次seed()。就像上述实例 1 一样。

import numpy as np

np.random.seed(1)
L1 = np.random.randn(3, 3)
np.random.seed(1)
L2 = np.random.randn(3, 3)
print(L1)
print(L2)
#调用两次seed,生成的随机数一样
“”“
[[ 1.62434536 -0.61175641 -0.52817175]
 [-1.07296862  0.86540763 -2.3015387 ]
 [ 1.74481176 -0.7612069   0.3190391 ]]
[[ 1.62434536 -0.61175641 -0.52817175]
 [-1.07296862  0.86540763 -2.3015387 ]
 [ 1.74481176 -0.7612069   0.3190391 ]]

”“”

 

seed在深度学习代码中叫随机种子,设置seed的目的是由于深度学习网络模型中初始的权值参数通常都是初始化成随机数,而使用梯度下降法最终得到的局部最优解对于初始位置点的选择很敏感,设置了seed就相当于规定了初始的随机值。 即产生随机种子意味着每次运行实验,产生的随机数都是相同的

为将模型在初始化过程中所用到的“随机数”全部固定下来,以保证每次重新训练模型需要初始化模型参数的时候能够得到相同的初始化参数,从而达到稳定复现训练结果的目的。【血泪教训】

深度学习中的参数初始化:

初始化参数指的是在网络模型训练之前,对各个节点的权重和偏置进行初始化赋值的过程。

在深度学习中,神经网络的权重初始化方法对模型的收敛速度和性能有着至关重要的影响。模型的训练,简而言之,就是对权重参数W的不停迭代更新,以期达到更好的性能。而随着网络深度(层数)的增加,训练中极易出现梯度消失(梯度很小)或者梯度爆炸(梯度很大)等问题。因此,对权重W的初始化显得至关重要,一个好的权重初始化虽然不能完全解决梯度消失或梯度爆炸的问题,但是对于处理这两个问题是有很大帮助的,并且十分有利于提升模型的收敛速度和性能表现。

深度学习初始化总结及代码意义

深度学习之参数初始化 - 知乎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值