tensorflow生成随机数及实现随机采样

2023-11-03

1. 生成随机数

参考1

  1. tf.random_normal:从正态分布中输出随机值。
    tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
    
  2. tf.random_uniform:从均匀分布中返回随机值
    random_uniform(
       shape,# 生成的张量的形状
       minval=0,
       maxval=None,
       dtype=tf.float32,
       seed=None,
       name=None
       )
    
  3. tf.truncated_normal:截断的正态分布函数。生成的值遵循一个正态分布,但不会大于平均值2个标准差。
    truncated_normal(
    shape,#一个一维整数张量或Python数组。代表张量的形状。
    mean=0.0,#数据类型为dtype的张量值或Python值。是正态分布的均值。
    stddev=1.0,#数据类型为dtype的张量值或Python值。是正态分布的标准差
    dtype=tf.float32,#输出的数据类型。
    seed=None,#一个Python整数。是随机种子。
    name=None#操作的名称(可选)
    )
    

2. 随机采样

参考2,tensorflow有几个函数可以实现候选采样:

  1. tf.nn.uniform_candidate_sampler:均匀采样
  2. tf.nn.log_uniform_candidate_sampler:按照log-uniform(Zipfian)分布采样,主要用作处理词作为类别的情况。==在语言学中,词按照出现频率从大到小排序之后,服从 Zipfian 分布。==在使用这个函数之前,需要对类别按照出现频率从大到小排序。
  3. tf.nn.learned_unigram_candidate_sampler:按照训练数据中类别出现分布进行采样。具体实现方式:
    1. 初始化一个 [0, range_max] 的数组, 数组元素初始为1;
    2. 在训练过程中碰到一个类别,就将相应数组元素加 1;
    3. 每次按照数组归一化得到的概率进行采样
  4. tf.nn.fixed_unigram_candidate_sampler3:按照自定义的(给定)概率分布进行采样。
  5. 小总结:
    • 如果类别服从均匀分布,就用uniform_candidate_sampler;
    • 如果词作类别,且词服从 Zipfian, 就用log_uniform_candidate_sampler;
    • 如果能够通过统计或者其他渠道知道类别满足某些分布,或者自己指定分布,可以用 nn.fixed_unigram_candidate_sampler;
    • 如果实在不知道类别分布,还可以用 tf.nn.learned_unigram_candidate_sampler根据数据学习分布

2.1 实例代码

参考4.

  1. 借助tf.nn.fixed_unigram_candidate_sampler:用参数unigrams表示每个类的可能性权重,即分布。分布可以用整数表示
    import tensorflow as tf
    import numpy as np
    sess = tf.Session()
    
    V = tf.constant( np.array( [[ 10, 30, 20, 50 ]]), dtype=tf.int64)
    
    sampled_ids, true_expected_count, sampled_expected_count = tf.nn.fixed_unigram_candidate_sampler(
       true_classes = V, #待采样真实数据
       num_true = 4, # 待采样真实数据类别总数
       num_sampled = 50,#采样个数
       unique = False,
       range_max = 4,
       unigrams = [ 20, 30, 10, 40 ] # this is P, times 100
    ) # 返回的是采样的数据id,即索引
    # 根据索引提取真实值
    sample = tf.gather( V[ 0 ], sampled_ids )
    x = sess.run( sample )
    print( x )
    
  2. 使用tf.nn.fixed_unigram_candidate_sampler,但是分布用浮点数表示
    import tensorflow as tf
    import numpy as np
    sess = tf.Session()
    
    k = 50 # number of samples you want
    V = tf.constant( [ 10, 30, 20, 50 ], dtype = tf.float32 ) # values
    P = tf.constant( [ 0.2, 0.3, 0.1, 0.4 ], dtype = tf.float32 ) # prob dist
    
    cum_dist = tf.cumsum( P ) # create cumulative probability distribution
    
    # get random values between 0 and the max of cum_dist
    # we'll determine where it is in the cumulative distribution
    rand_unif = tf.random_uniform( shape=( k, ), minval = 0.0, maxval = tf.reduce_max( cum_dist ), dtype = tf.float32 )
    
    # create boolean to signal where the random number is greater than the cum_dist
    # take advantage of broadcasting to create Cartesian product
    greater = tf.expand_dims( rand_unif, axis = -1 ) > tf.expand_dims( cum_dist, axis = 0 )
    
    # we get the indices by counting how many are greater in any given row
    idxs = tf.reduce_sum( tf.cast( greater, dtype = tf.int64 ), 1 )
    
    # then just gather the sample from V by the indices
    sample = tf.gather( V, idxs )
    
    # run, output
    print( sess.run( sample ) )
    
  3. 借助tf.distributions.Categorical()5
    # Probability distribution
    P = [0.2, 0.3, 0.1, 0.4]
    
    # Vector of values
    V = [10, 30, 20, 50]
    
    # Define categorical distribution
    dist = tf.distributions.Categorical(probs=P)
    
    # Generate a sample from categorical distribution - this serves as an index
    index = dist.sample().eval()
    
    # Fetch the value at V[index] as the sample
    sample = V[index]
    
    以上代码可以用如下一行代码表示:
    sample = V[tf.distributions.Categorical(probs=P).sample().eval()]
    
    如果想要从分布P中采样K个样本,则可用如下代码实现:
    samples = [ V[tf.distributions.Categorical(probs=P).sample().eval()] for i in range(K) ]
    
    划掉的部分代码是低效的,更高效的方法是可以设置sample的参数sample_shape,采样sample_shape大小的样本:
    samples = dist.sample(sample_shape=[17,17]) #采样[17,17]大小的矩阵,每个元素都是从分布P中随机采样得到的
    
  4. 借助tf.multinomial采样,参考67
    elems = tf.convert_to_tensor([1,2,3,5])
    samples = tf.multinomial(tf.log([[0.1, 0, 0.3, 0.6]]), 1) # note log-probability
    elems[tf.cast(samples[0][0], tf.int32)].eval()
    Out: 1
    elems[tf.cast(samples[0][0], tf.int32)].eval()
    Out: 5
    
    tf.random.multinomial(
    logits, # log-probabilities
    num_samples,  #采样个数,必须是整数
    seed=None,
    name=None,
    output_dtype=None
    )
    

3. 随机打乱数据

使用tf.random_shuffle8来随机打乱数据。打乱第一维度(axis=0)的数据。

tf.random.shuffle(
    value,
    seed=None,
    name=None
)

  1. https://blog.csdn.net/tz_zs/article/details/75948350 ↩︎

  2. http://www.algorithmdog.com/tf-candidate-sampling ↩︎

  3. https://www.tensorflow.org/api_docs/python/tf/random/fixed_unigram_candidate_sampler ↩︎

  4. https://stackoverflow.com/questions/49713210/how-to-sample-in-tensorflow-by-custom-probability-distribution ↩︎

  5. https://www.tensorflow.org/api_docs/python/tf/distributions/Categorical ↩︎

  6. http://bbs.bugcode.cn/t/122413 ↩︎

  7. https://www.tensorflow.org/api_docs/python/tf/random/multinomial ↩︎

  8. https://www.tensorflow.org/api_docs/python/tf/random/shuffle ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tensorflow生成随机数及实现随机采样 的相关文章

  • zip压缩,使用org.apache.tools.zip实现zip压缩和解压

    1 使用apache的ant解压 org apache tools zip 2 引入pom
  • Java判断一个时间是否在时间区间内

    package com liying tiger test import java text ParseException import java text SimpleDateFormat import java util Calenda
  • vue自定义穿梭框支持远程滚动加载

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 技术框架公司的选型 老项目 vue2 iview ui 方案的实现思路是共性的 展现UI样式需要你们自定义进行更改 因为iview是全局注入
  • springBoot整合kafka配置

    pom xml
  • vim编辑器格式化代码

    他丫儿的搞啥子嘛 乱七八糟的 在vim中其实也有像Eclipse中的ctrl shift F 的自动格式化代码的操作 尽管非常强大 但是通常会破坏代码的原有的缩进 所以不建议在python这样缩进代替括号的语言中和源程序已经缩进过的代码中使
  • 随机生成几位字母加数字的混合字符串

    日常开发中 我们可能需要一些随机字符串做测试 可能是4位 也可能是8位 如下是一个随机生成8位字符串的工具类 可根据需要 改成自己的需要的 import java util Random public class RandomGenerat
  • java语言StringUtils工具类

    import com mls util tool codec EncodeUtils import com mls util tool collect ListUtils import org apache commons lang3 St
  • TSDB时序数据库-OpenTSDB

    TSDB时序数据库 OpenTSDB 背景 一 概念 二 使用引入 背景 需要及时获取短信发送消息队列的堆积情况 pass将相关信息及时的存入了opentsdb时序数据库中 现需要读取时序数据库将堆积情况以短信形式通知 一 概念 时间序列数
  • 生成csv

    package com study csv import java io File import java io FileNotFoundException import java io FileOutputStream import ja
  • 使用XStream实现Java对象与XML互相转换(不断更新中)

    添加pom依赖
  • Git恢复本地误删文件

    转 https www cnblogs com yangshifu p 9680993 html Step 1 git status Step 2 git reset HEAD 被删除的文件或文件夹 Step 3 git checkout
  • Ubuntu 14.04 apt-get update失效解决

    当运行apt get update后出现如下错误时 E Some index files failed to download they have been ignored or old ones used instead 可以将目录下 v
  • centos安装docker后,ping不能服务器ip

    工作中碰的问题 记录下解决过程 问题描述 2台内网服务器 A 172 20 72 77 和B 172 17 3 222 在A服务上ping B 安装 docker之前是可以ping通 安装docker之后确ping不通了 查找原因 在安装d
  • java调第三方接口

    目录 背景 Spring的RestTemplate 1 引入依赖 2 RestTemplate配置类 3 RestTemplate实现类 背景 java调第三方接口我百度的有三种方法 第一种 通过JDK网络类Java net HttpURL
  • 推荐一个将MD格式的文档轻松转换到微信公众号的工具

    因为微信公众号自带的编辑器不是特别友好 这也是一个痛点 之前也有使用过google插件 但不是特别灵活 现在推荐的这款工具可以很好的支持将MD格式的文档直接进行渲染 还是非常好用的 话不多说 先给出工具地址 https md openwri
  • TortoiseGit工具 修改登录用户名密码

    TortoiseGit是大家常用的git客户端 操作起来非常的简便 但是当账号密码变化之后 再使用TortoiseGit操作git就会提示没有权限 那么 TortoiseGit怎么修改用户名密码呢 下面本文就介绍一下 方法 步骤 首先 打开
  • VS2019安装Qt插件教程,发现下载不了问题解决

    1 打开VS 最上方工具栏中点击扩展窗口 选择管理扩展 2 在右边搜索中搜索qt出现以下界面 这时可能出现问题 再点击下载发现迟迟下载不了 或者是下载到一定地步后无法下载 再或者是下载完成后安装无反应 解决办法 点击有点的详细信息或者进入如
  • WSL无法访问网络的解决办法

    今天在用WSL的时候突然网络抽风 域名解析出了问题 apt update都用不了 网上查了很多方法 什么vEthernet的IP啊 ifconfigip啊 ip route add default啥的 都不管用 最后还是看了一下 etc r
  • 对接百度api的工具类:Base64Util,FileUtil,HttpUtil

    对接百度api的工具类 Base64Util FileUtil HttpUtil package com baidu ai aip utils Base64 工具类 public class Base64Util private stati
  • Java基础之随机生成数字和字母

    原文地址 http blog csdn net yaodong y article details 8115250 字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码 是由美国国家标准局 ANSI 制定的ASCII码 Am

随机推荐

  • 交换机路由器作用以及工作原理详解

    1 1 PC机之间访问过程 A访问B过程 通过数据 mac地址 进行访问 1 A发送request请求包 该包携带源macA和目标macB 2 request请求包经过中继器进行 广播 所有的都可以收到该包 3 B收到A的请求包后 B给A回
  • DAO VC能成为股权众筹市场杀手级应用吗?Syndicate协议集体化VC怎么玩

    DAOVC本身不是新鲜事物 在DeFi领域 DAOVC有另外一个称呼 DeVC 去中心化VC 随着NFT市场的成熟以及GameFi被推向巅峰 DAO概念开始升温 YGG YieldGuildGames 是其中的知名代表 美国加密游说活动也助
  • OpenCV项目3-图像处理之信用卡数字识别

    OpenCV项目3 图像处理之信用卡数字识别 1 图片显示函数 2 模板读取 3 模板灰度化 二值化 4 模板轮廓计算 绘画 排序 5 模板取数字 尺寸resize 6 信用卡读取 7 信用卡尺寸resize 8 信用卡灰度化 卷积核 形态
  • CentOS 安装MariaDB的安装过程---离线安装

    CentOS 安装MariaDB的安装过程 离线安装 我使用在线安装的方式 怎么也成功不了 于是只能改成离线安装 然后发现离线安装其实也挺方便的 在这里和大家分享一下 1 首先要下载七个离线包 千万别下错了 http yum mariadb
  • Datax使用rdbmsreader支持clickhouse的读取

    参考链接 22条消息 使用datax的rdbmsreader实现读取clickhouse Sleten09的博客 CSDN博客 背景 想要把click house的数据源同步到HDFS 发现Datax没有clickhousereader组件
  • string与int之间转换

    一 int 转换为 string 1 使用to string 函数 格式 string str to string number 需引入头文件 include
  • 栈和队列-P79-10【2014统考真题】

    队列两端均可以入队和出队 那么也就是说对头在哪都可以 不一定在两端 严格的说并没有两端 因为是循环队列
  • Envoy基础与快速入门-Day 02

    1 Envoy介绍 1 1 什么是Envoy 官方文档 https www envoyproxy io docs envoy latest intro what is envoy Envoy本身是一种L7 层 HTTP HTTPS 的反向代
  • vue3 driver.js 引导页 使用方法

    先展示一下效果 ps 不要在意没对齐 第一步 下载 deiver js npm i driver 第二步 在组件中引入 import Driver from driver js import driver js dist driver mi
  • 交叉熵理解

    Likelihood 似然 与 Maximun Likelihood Estimation 似然与概率 概率是已知模型的参数 求某个事情发生的可能性 概率可以表示为 p x p x Thet
  • 《关基保护要求》实施,应用层零信任将发挥重要作用

    2023年5月1日起 国家标准 GB T 39204 2022 信息安全技术 关键信息基础设施安全保护要求 正式实施 这是继 关键信息基础设施安全保护条例 发布后首个正式发布的针对性标准 也代表着关键信息基础设施保护工作部门开展监管 运营者
  • VS2022集成代码规范组件StyleCop.Analyzers应用于解决方案

    背景 项目团队刚刚组件 每个人的代码编写习惯都不一样 希望用一款代码规范的检查插件来规范团队成员编写代码的习惯 在网上找了一遍之后 感觉StyleCop Analyzers比较适用 集成方法 1 NuGet搜索StyleCop Analyz
  • python 中range(10)什么意思_range什么意思python编程【面试题详解】

    今天爱分享给大家带来range什么意思python编程 面试题详解 希望能够帮助到大家 今天来谈一谈关于Python中range 的作用 和我个人的理解 range的中文意思是 范围 幅度 或者是在xxx之间变动 函数原型 range st
  • linux 更改用户权限

    最近一直在忙项目上的事情 没时间更新 项目基本上已经接近尾声 主要是一些部署的收尾工作 在部署的过程中 也遇到了一些问题 先慢慢记录吧 今天主要记录的是 如何提升普通运行为管理员身份 在日常开发过程中 调用第三方程序 该程序由于内部实现的原
  • Dynamics CRM和企业微信集成(一)理论方案

    Dynamics CRM和企业微信集成 一 理论方案 方案简述 工具类都差不多就位了 那么今天开始写点有用的东西 之前的项目有做过CRM和企业微信集成 现在总结一下吧 方案简述 关键是登陆时 把微信ID和CRM用户做绑定 阅读企业微信的AP
  • 小米笔记本pro 双硬盘双系统 opencore引导安装黑苹果

    个人情况说明 小米笔记本PRO 15 6 项目 参数 CPU i5 8250U GPU MX150 内存 8G 硬盘1 三星pm961 256g 硬盘2 intel 240g 注意事项 三星pm981装黑苹果会有问题 嫌麻烦的话建议直接换硬
  • webpack打包后引用cdn的js_webpack系列-externals配置使用(CDN方式引入JS)

    如果需要引用一个库 但是又不想让webpack打包 减少打包的时间 并且又不影响我们在程序中以CMD AMD或者window global全局等方式进行使用 一般都以import方式引用使用 那就可以通过配置externals 这样做的目的
  • commitlint无效 commit-msg不执行

    一 安装commitlint yarn add commitlint config conventional commitlint cli D 二 commitlint无效 commit msg不执行 解决办法 1 删除package js
  • 【spring5学习笔记】-----bean的多实例与单实例

    bean的多实例与单实例 首先介绍概念 什么是spring中bean的多实例和单实例 在上面这个例子中 我们两次调用context的getBean 方法得到的两个对象的引用值是相等的 这说明此时spring是单实例的 两次调用方法得到的是同
  • tensorflow生成随机数及实现随机采样

    文章目录 1 生成随机数 2 随机采样 2 1 实例代码 3 随机打乱数据 1 生成随机数 参考1 tf random normal 从正态分布中输出随机值 tf random normal shape mean 0 0 stddev 1