def batch_loss(encoder, decoder, X, Y, loss):batch_size = X.shape[0]enc_state = encoder.begin_state(batch_size=batch_size)enc_outputs, enc_state = encoder(X, enc_state)# 初始化解码器的隐藏状态dec_state = decoder.begin_state(enc_state)# 解码器在最初时间步的输入是BOSdec_input = nd.array([out_vocab.token_to_idx[BOS]] * batch_size)# 我们将使用掩码变量mask来忽略掉标签为填充项PAD的损失mask, num_not_pad_tokens = nd.ones(shape=(batch_size,)), 0bflag1=1print("调用我的bflag1=",bflag1,"type(bflag1)=",type(bflag1))if(bflag1 == 1):print("type(mask)=",type(mask),"origin mask=",mask,"mask.shape=",mask.shape)bflag1 = bflag1 +1l = nd.array([0])   for y in Y.T:if(bflag1==2):print("y=",y)bflag1 = bflag1+1dec_output, dec_state = decoder(dec_input, dec_state, enc_outputs)l = l + (mask * loss(dec_output, y)).sum()dec_input = y  # 使用强制教学num_not_pad_tokens += mask.sum().asscalar()# 当遇到EOS时,序列后面的词将均为PAD,相应位置的掩码设成0 mask = mask * (y != out_vocab.token_to_idx[EOS])if(bflag1==3):print("mask =",mask,"mask.shape=",mask.shape,"(y != out_vocab.token_to_idx[EOS])=",(y != out_vocab.token_to_idx[EOS]))bflag1 = bflag1+1return l / num_not_pad_tokens输出   注意mask 与 (y != out_vocab.token_to_idx[EOS])的结果都是ndarrayX=
[[ 9. 30. 27. 45.  4.  3.  1.][12.  5. 44. 37. 16.  4.  3.]]
<NDArray 2x7 @cpu(0)> Y=
[[ 7.  5. 31. 11. 18.  4.  3.][ 7.  5. 11. 27. 29.  4.  3.]]
<NDArray 2x7 @cpu(0)> Y.T=
[[ 7.  7.][ 5.  5.][31. 11.][11. 27.][18. 29.][ 4.  4.][ 3.  3.]]
<NDArray 7x2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 7.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[8. 9.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[8. 8.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[9. 8.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 7.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[8. 8.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 9.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 9.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[9. 7.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[8. 9.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[8. 7.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[8. 9.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[9. 9.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 8.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 9.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[9. 7.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 8.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[7. 8.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[8. 7.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
调用我的bflag1= 1 type(bflag1)= <class 'int'>
type(mask)= <class 'mxnet.ndarray.ndarray.NDArray'> origin mask=
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,)
y=
[9. 8.]
<NDArray 2 @cpu(0)>
mask =
[1. 1.]
<NDArray 2 @cpu(0)> mask.shape= (2,) (y != out_vocab.token_to_idx[EOS])=
[1. 1.]
<NDArray 2 @cpu(0)>
(y != out_vocab.token_to_idx[EOS])= <class 'mxnet.ndarray.ndarray.NDArray'>

mxnet中ndarray*ndarray用来作为掩码进行与运算的用法相关推荐

  1. MXNet中的NDArray

      想要跑代码可以参考这里搭建环境,同时再查一下关于jupyter notebook的基本操作即可.本文是笔记以及一些自己的补充.   在MXNet中,NDArray是一个类,也是存储和变换数据的主要 ...

  2. JS中使用bignumber处理高精度小数 失去去精确度运算 bigNumber用法

    项目开发中发现精度丢失的问题,如0.1+0.2 = 0.30000000000000004的问题 解决方式:引用bignumber.js用于数字精度要求较高的计算. 1.安装或引用:      下载地 ...

  3. Numpy 中的 Ndarray

    numpy概述 Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力. Numpy是其它数据分析及机器学习库的底层库. Numpy完全标准C语言实现,运行效 ...

  4. mxnet深度学习(NDArray)

    mxnet深度学习(NDArray) MXNet里面的3个主要的概念: NDArray:NDArray提供了矩阵和张量(tensor)运算在CPU和GPU上,通过使用并行运算的技术. Symbol:S ...

  5. python中文读音ndarray-numpy中的ndarray方法和属性详解

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  6. dataframe 切片_NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换

    在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让一些开发者产生了困惑.本文将简单介绍这三种数据类型,并以金融市场数据为例,给出相 ...

  7. 总结numpy中的ndarray,非常齐全

    公众号后台回复"图书",了解更多号主新书内容 来源:Python碎片 作者:binn.wong numpy(Numerical Python)是一个开源的Python数据科学计算库 ...

  8. 数据分析-----NumPy中的ndarray数组

    目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...

  9. numpy 查找 返回索引_numpy中实现ndarray数组返回符合特定条件的索引方法

    下面为大家分享一篇numpy中实现ndarray数组返回符合特定条件的索引方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 在numpy的ndarray类型中,似乎没有直接返回特定索引的方 ...

最新文章

  1. 维护局域网,让更给力,教你如何去维护局域网
  2. 计算机一级必考知识点,计算机一级word操作知识点
  3. python培训班排行榜-西安Python培训班排行榜
  4. 转载:谢谢原作者:块设备驱动实战基础篇三 (BIO请求回调机制)
  5. springboot源码解析autoconfigure之WebMvcAutoConfiguration
  6. RHEL 6.5 + Oracle 11g安装
  7. df的缺失值处理 df.isnull()和df.dropna()
  8. 小程序引用icon图标(入门)
  9. mysql内表和外表_Hive内表和外表的区别
  10. 二项分布的期望方差证明_关于二项分布
  11. 学习嵌入式和单片机有没有必要,价值体现在哪
  12. ROS2机器人笔记20-08-15
  13. 百度搜索url参数详解
  14. 【CF335 E】Counting Skyscrapers
  15. 检测应用位于后台,并弹出手势解锁,解锁成功进入主界面
  16. Payoneer取人民币全过程(ATM)
  17. MOS管热设计及发热分析详解
  18. Kaggle_NBME NLP比赛Baseline详解(2)
  19. keras 中adam_ADAM电影中的照明技巧和窍门
  20. Python面向对象:小明和小美爱跑步

热门文章

  1. Python测试框架pytest(01)简介、安装、快速入门
  2. python循环队列_关于循环队列的一些讲解
  3. python控制caxa模块_CAXA二次开发实用手册.doc
  4. java什么时候用有参_Java有陷阱——慎用入参做返回值
  5. php 查oracle 表不存在报错处理,Oracle ORA-08104报错处理方法及注意事项
  6. sql 怎样 得到 的客户端的ip地址_怎样用卷发棒?正确用法大揭密-装修攻略
  7. 强制类型转换(Java)
  8. 华工计算机考研上机,08华工计算机应用复试全过程_跨考网
  9. 【LC3开源峰会网络技术系列之三】基于JStorm的网络分析平台
  10. iOS - 图文混排技术方案分享