mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...

f41e0de6c19067e5ad477244165ba272.png

1、什么是生成器

我们可以把生成器理解为一个高端的列表。生成器就是一个集算法和列表还有依次读取于一体的功能。因为如果列表存储的内容过多就会造成内存的浪费。但是如果“列表”内的元素可以通过某种规则展示出来、且我们只需要前几项的元素,我们就可以通过使用生成器来进行。

2、生成器怎么用

# 列表的用法
a = [x for x in range(10)]
=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 生成器的用法
a = (x for x in range(10))
=><generator object <genexpr> at 0x0000027656609408>

我们输出的是一个generator。而列表打印的出来的就是元素。我们如何将generator的元素打印出来呢?使用next函数,将generator的元素打印出来。

next(b)
=>0
next(b)
=>1
next(b)
=>2
next(b)
=>3
next(b)
=>4
next(b)
=>5
........
#当元素超出时报错停止
next(b)
=>Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

对于这种情况,我们不必一直使用next对其进行调用,我们可以使用使用for循环对其进行调用,这样就可以省去很多事情,便于操作。

这是一种简单的用法,下面我们将函数信息与生成器结合使用。其大致使用方法跟一般的函数(循环)的使用。

#使用generator达到生成器的效果
def fid(max):n, a, b = 0, 0 ,1while n < max:yield ba , b = b , a + bn += 1
f = fid(6)
=><generator object fid at 0x00000201278195E8>
next(f)
=>1
next(f)
=>1
next(f)
=>2
next(f)
=>3

我们可以看出yield的效果和return的效果差不都,但是yield不会使函数值返回,而是使得函数的值暂时挂起。我们使用next使得函数的值输出,这极大的提高了我们的效率。

3、生成器在深度学习中的应用

def xs_gen_pro(data,batch_size):lists = datanum_batch = math.ceil(len(lists) / batch_size)    # 确定每轮有多少个batchfor i in range(num_batch):if(i==0):np.random.shuffle(lists)batch_list = lists[i * batch_size : i * batch_size + batch_size]np.random.shuffle(batch_list)batch_x = np.array([x for x in batch_list[:,0]])batch_y = np.array([y for y in batch_list[:,1]])yield batch_x, batch_y
​
if __name__ == "__main__":#data_gen = xs_gen(data,5)for x,y in xs_gen(data,5):print("item",x,y)for x,y in xs_gen(data,5):print("item",x,y)

为了方便演示,上面是直接对列表进行读入操作,一般在用的时候是读取path列表,在按照path提取数据。

item [50 30 20 90 80] [5 3 2 9 8]
item [ 60   0 100 110  40] [ 6  0 10 11  4]
item [120  10 140 130 150] [12  1 14 13 15]
item [70] [7]
item [120  90  70  80 130] [12  9  7  8 13]
item [ 10 150 100   0  50] [ 1 15 10  0  5]
item [140  30  60  20 110] [14  3  6  2 11]
item [40] [4]

这样就可以很好的读取到数据了。

4、再看生成器

前面已经对生成器有了感性的认识,我们以生成器函数为例,再来深入探讨一下Python的生成器:

1、语法上和函数类似:生成器函数和常规函数几乎是一样的。它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值。

2、自动实现迭代器协议:对于生成器,Python会自动实现迭代器协议,以便应用到迭代背景中(如for循环,sum函数)。由于生成器自动实现了迭代器协议,所以,我们可以调用它的next方法,并且,在没有值可以返回的时候,生成器自动产生StopIteration异常。

3、状态挂起:生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行。

5、使用生成器所需的注意事项

我们通过对上面的输出进行分析可以得出,我们可以知道,输出仅有一次。因此我们使用生成器时需要注意的是:生成器只能遍历一次。

6、参考

赖明星——《python生成器到底有什么优点?》

小宋是呢——《[开发技巧]·深度学习使用生成器加速数据读取与训练简明教(TensorFlow,pytorch,keras)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从键盘上录入10科考试分数,输出最高分最高分输入的序号

从键盘上录入10科考试分数&#xff0c;输出最高分最高分输入的序号 import java.util.Scanner;/* * 从键盘上录入10科考试分数&#xff0c;输出最高分最高分输入的序号 * */ public class Test02 {public static void main(String[] args) {Scanner sc new Scanner(System.in…

pycharm项目目录结构_「Actix-web项目」-项目整体目录结构

前言完成一个前后端分离项目&#xff0c;后端技术选型Rust的框架Actix-web&#xff0c;那么用这个框架完成后端代码它的项目目录很重要&#xff0c;今天就来着重介绍一下。目录结构下面是自己用Rust Actix-web框架写web后端的目录结构&#xff0c;如图所示&#xff1a;目录结构…

java查询数组中元素的索引

java查询数组中元素的索引 /*** java查询数组中元素的索引*/ public class Test03 {public static void main(String[] args) {int[] arr {5,7,4,9,5,7,2,8,1,5,0};//查询元素 2 的索引int value 2;//准备一个变量用于存储目标元素的索引int index -1;//查找元素在数组中第…

完善三个数字对象排序程序。MOOC,Java第四章 面向对象和类 第一次作业

题目内容&#xff1a; 完善以下程序&#xff0c;利用swap函数&#xff0c;完成数字按从小到大的顺序输出。例如输入5 4 3 输出3,4,5。 输入格式: 输入3个数字。 输出格式&#xff1a; 数字从小到大排列 输入样例&#xff1a; 5 4 3 输出样例&#xff1a; 3,4,5 代码…

触发器及其应用实验报告总结_双面喷绘材料的分类及其应用,超全总结!(建议收藏)...

▲ 东川 | 点击图片获取更多信息▲ 东川 | 点击图片获取更多信息双面喷绘材料&#xff0c;有适合水性机器喷的双面摭光画布&#xff0c;有适合弱溶剂和UV喷绘的PVC双喷、PET双喷、双喷网格布、双面牛筋布&#xff0c;它们有个共同的特点就是&#xff0c;即可以单面打画面&#…

java实现程序输出以下5*5数字方格

请实现程序输出以下5*5数字方格。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 需要在main函数的输入参数中设置5&#xff0c;输出5*5的数字方格。如果是输入7&#xff0c;则是7*7的数字方格。 代码如下&#xff1…

java请实现程序输出以下星塔||输出菱形

java请实现程序输出以下星塔||输出菱形 请实现程序输出以下星塔。 * *** ***** *** * 需要在main函数的输入参数中设置5&#xff0c;输出5层星塔。如果是输入7&#xff0c;则是7层星塔。假设输入参数都是奇数&#xff0c;且都大于等于5&#xff0c;小于等于11。 第一种写法&a…

为什么自己编写的页面总是在那里抖动_别克威朗为什么销量不佳?

汽车发展到现在有些车企经历了几十年&#xff0c;而有些车企则是经历了上百年&#xff0c;所以在历史长河的积淀当中&#xff0c;总会有大起大落&#xff0c;混得好的就成为了百年车企&#xff0c;混得不好的就早早退市。而对于车型而言&#xff0c;同样也是如此&#xff0c;有…

java数组的扩容,将两个数组合并成一个数组

java数组的扩容&#xff0c;将两个数组合并成一个数组 //将下列两个数组合成一个数组 public class Test04 {public static void main(String[] args) {int[] a {1,3,4,56,7,8,9,3};int[] b {12,34,56,43,78,74,36};int[] c new int[a.lengthb.length];//将数组a中的元素方…

java开发项目实例_学java开发,项目经验最重要

不想做将军的士兵不是好士兵&#xff01;相信没有人一开始学java&#xff0c;就是为了将来一直做一名初级java开发工程师。只需掌握一些简单代码技巧&#xff0c;别人告诉想要实现的效果&#xff0c;然后自己能用代码堆砌来实现。更何况&#xff0c;现在企业对java开发工程师的…

java在原数组中追加一个元素

java在原数组中追加一个元素 /* * 在原数组中追加一个元素 * */ public class Test05 {public static void main(String[] args) {//在下面这个数组中追加一个元素9int[] a {1,2,3,4,5,6,7,8};int b 9;int[] c new int[a.length1];//复制旧数组到新数组中去for (int i 0;i…

java组件是什么意思_年前面试京东3面凉经~ 面试过程与真题全分享+备战春招(java)...

1月4号得到通知&#xff0c;京东无望了&#xff0c;哭晕在厕所&#xff0c;现在给大家把这些面试题分享出来&#xff0c;希望给想要进京东的一些程序员点点帮助&#xff01;接下来开始分享我去面试的时候面试官问我的那些面试题京东java一面记录简单介绍下自己介绍主要用到的技…

java如何在指定索引位置插入新元素

在arr数组中索引为3的位置&#xff0c;插入一个元素 10 /* * 在arr数组中索引为3的位置&#xff0c;插入一个元素 10 * */ public class Test06 {public static void main(String[] args) {int[] arr {2,6,8,4,9,5,1,3};//要插入索引的位置int x 3;//创建新数组int[] newArr…

java从数组中删除元素(数组的缩容)

java从数组中删除元素&#xff08;数组的缩容&#xff09; 1&#xff0c;解决方案一 /* * 数组的缩容&#xff08;删除元素&#xff09; * 第一种解决方案 * 移动元素&#xff0c;被删除元素后面的元素往前移一位 * 优点&#xff1a;不需要创建新数组&#xff0c;省内存&…

利用代码分别实现jdk动态代理和cglib动态代理_面试之动态代理

大家好&#xff01;我是CSRobot&#xff0c;从今天开始&#xff0c;我将会发布一些技术文章&#xff0c;内容就是结合春招以来的面试所遇到的问题进行分享&#xff0c;首先会对知识点进行一个探讨和整理&#xff0c;在最后会给出一些面试题并作出解答&#xff0c;希望可以帮助到…

将下列数组中奇数和偶数分别存放于两个不同的两个数组

将下列数组中奇数和偶数分别存放于两个不同的两个数组 /* * 将下列数组中奇数和偶数分别存放于两个不同的两个数组 * */ public class Test09 {public static void main(String[] args) {int[] arr {12,34,23,47,72,84,22,28,45,57,91};//用于统计偶数元素个数int o 0;for (…

数组工具类的使用

数组工具类的使用 package demo02; /* * 数组工具类的使用 * 数组的复制操作 * */ import java.util.*;public class Test10 {public static void main(String[] args) {int[] arr {3,4,2,66,75,4,322,55,33,85,39};System.out.println(Arrays.toString(arr));//排序问题Arra…

从键盘上录入学生人数和每个学生的分数,按分数降序输出所有的分数,java冒泡排序应用

从键盘上录入学生人数和每个学生的分数&#xff0c;按分数降序输出所有的分数 import java.util.Arrays; import java.util.Scanner;/* * 从键盘上录入学生人数和每个学生的分数&#xff0c;按分数降序输出所有的分数 * java冒泡排序 * */ public class Test12 {public static…

jvm内存结构_JVM系列之内存结构

JVM的内存结构大概分为&#xff1a;堆&#xff08;Heap&#xff09;&#xff1a;线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。堆内存是JVM中最大的一块由年轻代和老年代组成&#xff0c;而年轻代内存又被分成三部分&#xff0c;Eden空间、From Sur…

java从键盘上录入学生人数和每个学生的姓名以及分数,按照分数降序输出,学生名次、学生姓名、学生分数

java从键盘上录入学生人数和每个学生的姓名以及分数&#xff0c;按照分数降序输出&#xff0c;学生名次、学生姓名、学生分数 import java.util.Scanner;/* * 从键盘上录入学生人数和每个学生的姓名以及分数&#xff0c;按照分数降序输出&#xff0c;学生名次、学生姓名、学生…