mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...
1、什么是生成器
我們可以把生成器理解為一個(gè)高端的列表。生成器就是一個(gè)集算法和列表還有依次讀取于一體的功能。因?yàn)槿绻斜泶鎯?chǔ)的內(nèi)容過多就會(huì)造成內(nèi)存的浪費(fèi)。但是如果“列表”內(nèi)的元素可以通過某種規(guī)則展示出來、且我們只需要前幾項(xiàng)的元素,我們就可以通過使用生成器來進(jìn)行。
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>我們輸出的是一個(gè)generator。而列表打印的出來的就是元素。我們?nèi)绾螌enerator的元素打印出來呢?使用next函數(shù),將generator的元素打印出來。
next(b) =>0 next(b) =>1 next(b) =>2 next(b) =>3 next(b) =>4 next(b) =>5 ........ #當(dāng)元素超出時(shí)報(bào)錯(cuò)停止 next(b) =>Traceback (most recent call last):File "<stdin>", line 1, in <module> StopIteration對(duì)于這種情況,我們不必一直使用next對(duì)其進(jìn)行調(diào)用,我們可以使用使用for循環(huán)對(duì)其進(jìn)行調(diào)用,這樣就可以省去很多事情,便于操作。
這是一種簡(jiǎn)單的用法,下面我們將函數(shù)信息與生成器結(jié)合使用。其大致使用方法跟一般的函數(shù)(循環(huán))的使用。
#使用generator達(dá)到生成器的效果 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不會(huì)使函數(shù)值返回,而是使得函數(shù)的值暫時(shí)掛起。我們使用next使得函數(shù)的值輸出,這極大的提高了我們的效率。
3、生成器在深度學(xué)習(xí)中的應(yīng)用
def xs_gen_pro(data,batch_size):lists = datanum_batch = math.ceil(len(lists) / batch_size) # 確定每輪有多少個(gè)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)為了方便演示,上面是直接對(duì)列表進(jìn)行讀入操作,一般在用的時(shí)候是讀取path列表,在按照path提取數(shù)據(jù)。
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]這樣就可以很好的讀取到數(shù)據(jù)了。
4、再看生成器
前面已經(jīng)對(duì)生成器有了感性的認(rèn)識(shí),我們以生成器函數(shù)為例,再來深入探討一下Python的生成器:
1、語法上和函數(shù)類似:生成器函數(shù)和常規(guī)函數(shù)幾乎是一樣的。它們都是使用def語句進(jìn)行定義,差別在于,生成器使用yield語句返回一個(gè)值,而常規(guī)函數(shù)使用return語句返回一個(gè)值。
2、自動(dòng)實(shí)現(xiàn)迭代器協(xié)議:對(duì)于生成器,Python會(huì)自動(dòng)實(shí)現(xiàn)迭代器協(xié)議,以便應(yīng)用到迭代背景中(如for循環(huán),sum函數(shù))。由于生成器自動(dòng)實(shí)現(xiàn)了迭代器協(xié)議,所以,我們可以調(diào)用它的next方法,并且,在沒有值可以返回的時(shí)候,生成器自動(dòng)產(chǎn)生StopIteration異常。
3、狀態(tài)掛起:生成器使用yield語句返回一個(gè)值。yield語句掛起該生成器函數(shù)的狀態(tài),保留足夠的信息,以便之后從它離開的地方繼續(xù)執(zhí)行。
5、使用生成器所需的注意事項(xiàng)
我們通過對(duì)上面的輸出進(jìn)行分析可以得出,我們可以知道,輸出僅有一次。因此我們使用生成器時(shí)需要注意的是:生成器只能遍歷一次。
6、參考
賴明星——《python生成器到底有什么優(yōu)點(diǎn)?》
小宋是呢——《[開發(fā)技巧]·深度學(xué)習(xí)使用生成器加速數(shù)據(jù)讀取與訓(xùn)練簡(jiǎn)明教(TensorFlow,pytorch,keras)》
總結(jié)
以上是生活随笔為你收集整理的mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.6库参考手册_pytho
- 下一篇: python增删改查csv文件_【练习】